XML文件
Java代码
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<ImageView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:scaleType="matrix"
android:id="@+id/imageView"
android:src="@drawable/hd3"
/>
</LinearLayout>
主页面:MainActivity.java
Java代码
package com.xiawenquan;
import android.app.Activity;
import android.graphics.Matrix;
import android.graphics.PointF;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ImageView;
public class MainActivity extends Activity {
/** Called when the activity is first created. */
private ImageView imageView;
private PointF startPoint = null;
private Matrix matrix = null;
private Matrix currMatrix ;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
startPoint = new PointF();
matrix = new Matrix(); // 用于拖拉变换
currMatrix = new Matrix(); // 用于拖拉变换
imageView = (ImageView) findViewById(R.id.imageView);
imageView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent event) {
switch (event.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN://只有一个手指按下屏幕时触发的事件
currMatrix.set(matrix); // 保存上一次的移动点
startPoint.set(event.getX(),event.getY());//移动前,手指按下的位置
break;
case MotionEvent.ACTION_MOVE://手指在屏幕移动时触发的事件,该事件在移动过程不断被触发
float mX = event.getX() - startPoint.x; // 移动点的X坐标
float mY = event.getY() - startPoint.y;// 移动点的Y坐标
matrix.set(currMatrix); // 保存当前变换的点
matrix.postTranslate(mX, mY); // 移动到指定的点
break;
case MotionEvent.ACTION_POINTER_DOWN://如果已经有一个手指按下屏幕,后续再有手指按下屏幕,就会触发这个事件
break;
case MotionEvent.ACTION_UP://最后一个手指离开屏幕后触发的事件
break;
case MotionEvent.ACTION_POINTER_UP://有一个手指离开了屏幕,但还有手指在屏幕上,此时会触发该事件
break;
default:
break;
}
imageView.setImageMatrix(matrix); // imageView在移动
return true;
}
});
}
}
作者“1002878825-qq-com”