首页 / 操作系统 / Linux / Android中实现图片的拖拽显示
下面介绍一下Android中的图片的拖拽首先介绍处理手机的屏幕事件监听接口,当为View的范围内触摸按下、抬起或滑动等动作时都会触发该事件。OnTouchListenerpublic boolean onTouch(View v, MotionEvent event) MatrixMatrix的操作,总共分为translate(平移),rotate(旋转),scale(缩放)和skew(倾斜)四种,每一种变换在Android的API里都提供了set, post和pre三种操作方式,除了translate,其他三种操作都可以指定中心点。set是直接设置Matrix的值,每次set一次,整个Matrix的数组都会变掉。post是后乘,当前的矩阵乘以参数给出的矩阵。可以连续多次使用post,来完成所需的整个变换。 实现图片的移动:Activity中的文件代码:public class MyDragTestActivity extends Activity { ImageView imageView = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); init(); } private void init() { imageView = (ImageView) this.findViewById(R.id.imageView); imageView.setOnTouchListener(new ImageViewOnTouchListener()); } private final class ImageViewOnTouchListener implements OnTouchListener{ PointF startPoint = new PointF(); Matrix m = new Matrix(); public boolean onTouch(View v, MotionEvent event) { switch(event.getAction()&MotionEvent.ACTION_MASK){ case MotionEvent.ACTION_DOWN://指点杆按下 //当前位子保存为新的起始点 startPoint.set(event.getX(),event.getY()); break; case MotionEvent.ACTION_MOVE://指点杆保持按下,并进行位移 float dx = event.getX()- startPoint.x; float dy = event.getY()-startPoint.y; m.postTranslate(dx, dy); //将当前坐标保存为新起点 startPoint.set(event.getX(),event.getY()); break; case MotionEvent.ACTION_UP://指点杆离开屏幕 break; case MotionEvent.ACTION_POINTER_UP://有手指离开屏幕,但还有手指压住屏幕,就会触发事件 break; case MotionEvent.ACTION_POINTER_DOWN://如果已经有手机压在屏幕上,又有手指压在屏幕上了,多点触摸的意思 break; } imageView.setImageMatrix(m); return true; } }} 布局文件:<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <ImageView android:id="@+id/imageView" android:layout_width="fill_parent" android:layout_height="fill_parent" android:src="@drawable/a" android:scaleType="matrix" /></LinearLayout> 效果: