android第二十三步拖拽与缩放

android第二十三步拖拽与缩放
package com.example.dragscale;

import android.os.Bundle;
import android.app.Activity;
import android.graphics.Matrix;
import android.graphics.PointF;
import android.util.FloatMath;
import android.view.Menu;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.ImageView;

public class MainActivity extends Activity {

    ImageView imageView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        imageView = (ImageView)this.findViewById(R.id.imageView);
        imageView.setOnTouchListener(new TouchListener());
    }
    private final class TouchListener implements OnTouchListener{

        private PointF startPoint = new PointF();
        private Matrix matrix = new Matrix();
        private Matrix cuuentMatrix = new Matrix();
        private int mode= 0;
        private static final int drag=1;
        private static final int zoom=2;
        private float startDis;
        private PointF midPoint;
        @Override
        public boolean onTouch(View arg0, MotionEvent arg1) {
            switch(arg1.getAction() & MotionEvent.ACTION_MASK){ 
            case MotionEvent.ACTION_DOWN: 
                mode=drag;
                cuuentMatrix.set(imageView.getImageMatrix());
                startPoint.set(arg1.getX(), arg1.getY());
                break;
            case MotionEvent.ACTION_MOVE:
                if(mode == drag)
                {
                    float dx=arg1.getX()-startPoint.x;
                    float dy=arg1.getY()-startPoint.y;
                    matrix.set(cuuentMatrix);
                    matrix.postTranslate(dx, dy);
                }
                else{
                    float endDis=distance(arg1);
                    if(startDis >10f){
                        float scale = endDis/startDis;
                        matrix.set(cuuentMatrix);
                        matrix.postScale(scale, scale, midPoint.x, midPoint.y);
                    }
                }
                break;
            case MotionEvent.ACTION_UP:
                mode= 0;
                break;
            case MotionEvent.ACTION_POINTER_UP:
                mode= 0;
                break;
            case MotionEvent.ACTION_POINTER_DOWN:
                mode=zoom;
                startDis=distance(arg1);
                if(startDis >10f){
                    midPoint = mid(arg1);
                    cuuentMatrix.set(imageView.getImageMatrix());
                }
                break;
            
            }
            imageView.setImageMatrix(matrix);
            return true;
        }
        private float distance(MotionEvent arg1) {
            float dx= arg1.getX(1)-arg1.getX(0);
            float dy= arg1.getY(1)-arg1.getY(0);
            return FloatMath.sqrt(dx*dx+dy*dy);
        }
        private  PointF mid(MotionEvent arg1) {
            float midx= (arg1.getX(1)+arg1.getX(0))/2;
            float midy= (arg1.getY(1)+arg1.getY(0))/2;
            return new PointF(midx,midy);
        }
        
    }
android第二十三步拖拽与缩放

 

android第二十三步拖拽与缩放,布布扣,bubuko.com

android第二十三步拖拽与缩放

上一篇:Android_自定义切换控件SwitchView


下一篇:iOS 利用constraint实现2个控件上下的空白是相等的