안드로이드 개발 질문/답변
(글 수 45,052)
package com.x;
import android.app.Activity; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Matrix; import android.os.Bundle; import android.util.AttributeSet; import android.util.Log; import android.view.MotionEvent; import android.view.View; import android.widget.ImageView;
public class android extends Activity {
NaviImageView nImageView;
final static float STEP = 200;
float mRatio = 1.0f;
int mBaseDist;
float mBaseRatio;
NaviImageView mImg;
/** Called when the activity is first created. */
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
// WindowManager.LayoutParams.FLAG_FULLSCREEN);
// requestWindowFeature(Window.FEATURE_NO_TITLE);
Log.i("gu","1");
nImageView.setBackgroundColor(Color.WHITE);
Log.i("gu","2");
nImageView = new NaviImageView(this);
Log.i("gu","3");
nImageView.setBitmap( BitmapFactory.decodeResource(getResources(), R.drawable.school_bus));
Log.i("gu","4");
mImg=nImageView;
Log.i("gu","5");
setContentView(nImageView);
}
class NaviImageView extends View {
/** 이미지 **/
public Bitmap image = null;
private float startX = 0;
private float startY = 0;
private float userX = 0;
private float userY = 0;
final static int TOUCH_TOLERANCE = 4;
public NaviImageView(Context context) {
super(context);
}
public NaviImageView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public NaviImageView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public void setBitmap(Bitmap temp) {
image = temp;
userX = 0;
userY = 0;
// userX = (image.getWidth() - getWindowManager().getDefaultDisplay().getWidth())/ -2;
// userY = (image.getHeight() - getWindowManager().getDefaultDisplay().getHeight())/ -2;
}
protected void onDraw(Canvas canvas) {
if ( image != null)
canvas.drawBitmap(image, userX, userY, null);
}
public boolean onTouchEvent(MotionEvent event) {
float x = event.getX();
float y = event.getY();
switch ( event.getAction() ) {
case MotionEvent.ACTION_DOWN:
setUserNavi(x, y);
break;
case MotionEvent.ACTION_MOVE:
processNavi(x, y);
setUserNavi(x, y);
invalidate();
break;
case MotionEvent.ACTION_UP:
clearStartPoint();
invalidate();
break;
}
return true;
}
private void processNavi(float x, float y) {
if( Math.abs( (startX - x)) > TOUCH_TOLERANCE ||
Math.abs( (startY - y) ) > TOUCH_TOLERANCE ) {
if ( startX > x )
userX -= (startX - x );
else
userX += ( x - startX );
if ( startY < y)
userY += ( y - startY );
else
userY -= (startY - y);
}
}
private void setUserNavi(float x, float y) {
startX = x; startY = y;
}
private void clearStartPoint() {
startX = startY = 0;
}
public boolean onTouchEvent1(MotionEvent event) {
if (event.getPointerCount() == 2) {
int action = event.getAction();
int pureaction = action & MotionEvent.ACTION_MASK;
if (pureaction == MotionEvent.ACTION_POINTER_DOWN) {
mBaseDist = getDistance(event);
mBaseRatio = mRatio;
} else {
float delta = (getDistance(event) - mBaseDist) / STEP;
float multi = (float)Math.pow(2, delta);
mRatio = Math.min(1024.0f, Math.max(0.1f, mBaseRatio * multi));
Matrix m = new Matrix();
m.postScale(mRatio, mRatio);
mImg.setImageMatrix(m);
}
}
return true;
}
private void setImageMatrix(Matrix m) {
// TODO Auto-generated method stub
}
int getDistance(MotionEvent event) {
int dx = (int)(event.getX(0) - event.getX(1));
int dy = (int)(event.getY(0) - event.getY(1));
return (int)(Math.sqrt(dx * dx + dy * dy));
}
}
}


