Android小应用----图片的拖动、缩放

来源:互联网 发布:国防军事大数据案例 编辑:程序博客网 时间:2024/04/27 21:14
public class MainActivity extends Activity {private ImageView operImage;private PointF point = new PointF();//记录手指的位置private PointF midPoint = new PointF();//记录手指间的中点的位置private Matrix matrix = new Matrix();//记录拖动和缩放前手指按下的matrixprivate Matrix newMatrix = new Matrix();//记录手指正在拖动和缩放的matrixprivate int type = 0;//操作类型private float pointerDistance;//两个手指的距离private static final int DRAG = 1;//拖动private static final int SCALE = 2;//缩放@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);operImage= (ImageView) findViewById(R.id.before);operImage.setOnTouchListener(new OnTouchListener() {@Overridepublic boolean onTouch(View v, MotionEvent event) {int action = event.getAction()&MotionEvent.ACTION_MASK;switch (action) {case MotionEvent.ACTION_DOWN:float startX =  event.getX();float startY =  event.getY();//记录手指的位置point.set(startX, startY);//得到当前图片的位置matrix.set(operImage.getImageMatrix());type = DRAG;//拖动break;case MotionEvent.ACTION_POINTER_1_DOWN://记录图片没有缩放前的大小matrix.set(operImage.getImageMatrix());//记录两个手指的距离pointerDistance = getDistance(event);//记录两个手指距离的中点midPoint= getMidPoint(event);type = SCALE;//缩放break;case MotionEvent.ACTION_MOVE:switch (type) {case DRAG://拖动float newX =  event.getX();float newY =  event.getY();newMatrix.set(matrix);float dx = newX - point.x;float dy = newY - point.y;newMatrix.postTranslate(dx, dy);break;case SCALE://缩放newMatrix.set(matrix);float nowDistance = getDistance(event);//根据此时的两个手指间的距离除以开始的两个手指间的距离计算缩放比float scale = nowDistance/pointerDistance;//根据中心点进行缩放newMatrix.postScale(scale, scale, midPoint.x, midPoint.y);break;default:break;}break;case MotionEvent.ACTION_UP:type = 0;break;case MotionEvent.ACTION_POINTER_1_UP:type = 0;break;}operImage.setImageMatrix(newMatrix);return true;}});}/* * 计算两个手指的中点 */protected PointF getMidPoint(MotionEvent event) {float x = (event.getX(1) + event.getX(0))/2;float y = (event.getY(1) + event.getY(0))/2;return new PointF(x, y);}/* * 计算两点间的距离 */protected float getDistance(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);}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.main, menu);return true;}}

1 0
原创粉丝点击