關于Android手勢縮放圓球
這個主要是根據手勢縮放圖片功能改裝的一個簡易Demo.熟悉一下圖形操作..
代碼如下:package hfut.gmm; import android.app.Activity; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Matrix; import android.graphics.Paint; import android.graphics.PointF; import android.os.Bundle; import android.util.FloatMath; import android.util.Log; import android.view.MotionEvent; import android.view.View;public class MultiTouch extends Activity { PointF start = new PointF(); private Matrix matrix=new Matrix(); private Matrix savedMatrix=new Matrix();
@Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); MyView mv=new MyView(this); this.setContentView(mv); }
} class MyView extends View{ static final int NONE = 0;
static final int DRAG = 1;
static final int ZOOM = 2;
int mode = NONE; float oldDist = 1f; float mr=0; float mx; float my; public MyView(Context context) { super(context); // TODO Auto-generated constructor stub }@Override public boolean onTouchEvent(MotionEvent event) { // TODO Auto-generated method stub Log.d("Infor", "觸摸監聽到了..."); switch(event.getActionMasked()){ case MotionEvent.ACTION_DOWN://單點觸碰 mx=event.getX(); mr=50; Log.d("Infor", "mx"+mx); my=event.getY(); Log.d("Infor", "my"+my); mode=this.DRAG; break; case MotionEvent.ACTION_POINTER_DOWN://多點觸碰 oldDist=this.spacing(event); if(oldDist>10f){ Log.d("Infor", "oldDist"+oldDist); } mode=ZOOM; break; case MotionEvent.ACTION_MOVE://移動 if(mode==DRAG){ Log.d("Infor", "單點移動。。。"); mx=event.getX(); my=event.getY(); } else if(mode==ZOOM){ float newDist=spacing(event); if(newDist>10){ mr=newDist/oldDist*100; Log.d("Infor", "多點移動。。。"); Log.d("Infor", "newDist:"+newDist); } } break; case MotionEvent.ACTION_UP: mode=this.NONE; break; case MotionEvent.ACTION_POINTER_UP: mode=this.NONE; break; } invalidate(); return true; } private float spacing(MotionEvent event) { float x = event.getX(0) - event.getX(1); float y = event.getY(0) - event.getY(1); return FloatMath.sqrt(x * x + y * y);
}
@Override protected void onDraw(Canvas canvas) { // TODO Auto-generated method stub super.onDraw(canvas); Paint paint=new Paint(); paint.setColor(Color.BLUE); canvas.drawCircle(mx, my, mr, paint);}
}</pre>展示結果如下:
![]()