如何实现一个可以手势缩放的layout
步骤:1、将代码写到MulitPointTouchListener.java中importandroid.graphics.Matrix;importandroid.graphics.PointF;importandroid.util.FloatMath;importandroid.util.Log;importandroid.view.MotionEvent;importandroid.view.View;importandroid.view.View.OnTouchListener;importandroid.widget.ImageView;publicclassMulitPointTouchListenerimplementsOnTouchListener{privatestaticfinalStringTAG="Touch";//ThesematriceswillbeusedtomoveandzoomimageMatrixmatrix=newMatrix();MatrixsavedMatrix=newMatrix();//Wecanbeinoneofthese3statesstaticfinalintNONE=0;staticfinalintDRAG=1;staticfinalintZOOM=2;intmode=NONE;//RemembersomethingsforzoomingPointFstart=newPointF();PointFmid=newPointF();floatoldDist=1f;@OverridepublicbooleanonTouch(Viewv,MotionEventevent){ImageViewview=(ImageView)v;//Log.e("view_width",//view.getImageMatrix()..toString()"*"v.getWidth());//DumptoucheventtologdumpEvent(event);//Handletoucheventshere...switch(event.getAction()&MotionEvent.ACTION_MASK){caseMotionEvent.ACTION_DOWN:matrix.set(view.getImageMatrix());savedMatrix.set(matrix);start.set(event.getX(),event.getY());//Log.d(TAG,"mode=DRAG");mode=DRAG;//Log.d(TAG,"mode=NONE");break;caseMotionEvent.ACTION_POINTER_DOWN:oldDist=spacing(event);//Log.d(TAG,"oldDist="oldDist);if(oldDist>10f){savedMatrix.set(matrix);midPoint(mid,event);mode=ZOOM;//Log.d(TAG,"mode=ZOOM");}break;caseMotionEvent.ACTION_UP:caseMotionEvent.ACTION_POINTER_UP:mode=NONE;//Log.e("view.getWidth",view.getWidth()"");//Log.e("view.getHeight",view.getHeight()"");break;caseMotionEvent.ACTION_MOVE:if(mode==DRAG){//...matrix.set(savedMatrix);matrix.postTranslate(event.getX()-start.x,event.getY()-start.y);}elseif(mode==ZOOM){floatnewDist=spacing(event);//Log.d(TAG,"newDist="newDist);if(newDist>10f){matrix.set(savedMatrix);floatscale=newDist/oldDist;matrix.postScale(scale,scale,mid.x,mid.y);}}break;}view.setImageMatrix(matrix);returntrue;//indicateeventwashandled}privatevoiddumpEvent(MotionEventevent){Stringnames[]={"DOWN","UP","MOVE","CANCEL","OUTSIDE","POINTER_DOWN","POINTER_UP","7?","8?","9?"};StringBuildersb=newStringBuilder();intaction=event.getAction();intactionCode=action&MotionEvent.ACTION_MASK;sb.append("eventACTION_").append(names[actionCode]);if(actionCode==MotionEvent.ACTION_POINTER_DOWN||actionCode==MotionEvent.ACTION_POINTER_UP){sb.append("(pid").append(action>>MotionEvent.ACTION_POINTER_ID_SHIFT);sb.append(")");}sb.append("[");for(inti=0;i