안드로이드 개발 질문/답변
(글 수 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)); } } }