Android手势控制实现缩放、移动图片
本文实例为大家分享了Android手势控制实现缩放、移动图片的方法,供大家参考,具体内容如下
新建一个触摸监听器类
packagecom.liyong.btprinter; importandroid.graphics.Matrix; importandroid.graphics.PointF; importandroid.util.FloatMath; importandroid.view.MotionEvent; importandroid.view.View; importandroid.view.View.OnTouchListener; importandroid.widget.ImageView; publicclassMulitPointTouchListenerimplementsOnTouchListener{ privatestaticfinalStringTAG="Touch"; //Thesematriceswillbeusedtomoveandzoomimage Matrixmatrix=newMatrix(); MatrixsavedMatrix=newMatrix(); //Wecanbeinoneofthese3states staticfinalintNONE=0; staticfinalintDRAG=1; staticfinalintZOOM=2; intmode=NONE; //Remembersomethingsforzooming PointFstart=newPointF(); PointFmid=newPointF(); floatoldDist=1f; @Override publicbooleanonTouch(Viewv,MotionEventevent){ ImageViewview=(ImageView)v; //Log.e("view_width", //view.getImageMatrix()..toString()+"*"+v.getWidth()); //Dumptoucheventtolog dumpEvent(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<event.getPointerCount();i++){ sb.append("#").append(i); sb.append("(pid").append(event.getPointerId(i)); sb.append(")=").append((int)event.getX(i)); sb.append(",").append((int)event.getY(i)); if(i+1<event.getPointerCount()) sb.append(";"); } sb.append("]"); //Log.d(TAG,sb.toString()); } privatefloatspacing(MotionEventevent){ floatx=event.getX(0)-event.getX(1); floaty=event.getY(0)-event.getY(1); returnFloatMath.sqrt(x*x+y*y); } privatevoidmidPoint(PointFpoint,MotionEventevent){ floatx=event.getX(0)+event.getX(1); floaty=event.getY(0)+event.getY(1); point.set(x/2,y/2); } }
编写一个xml文件
<?xmlversion="1.0"encoding="UTF-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_height="fill_parent" android:layout_width="fill_parent" android:id="@+id/linearLayout1" android:weightSum="1"> <ImageViewandroid:layout_width="fill_parent" android:id="@+id/priviewimage" android:layout_height="fill_parent" android:layout_gravity="center" android:scaleType="matrix" > </ImageView> </LinearLayout>
注意其中的:android:scaleType="matrix"
priviewimage.setImageBitmap(ActivityPreviewImage.click_bitmap); priviewimage=(ImageView)findViewById(R.id.priviewimage); priviewimage.setOnTouchListener(newMulitPointTouchListener());
以上就是Android手势控制缩放移动图片的全部代码,希望对大家的学习有所帮助。