photoview拖拽和缩放

来源:互联网 发布:搞笑视频软件下载 编辑:程序博客网 时间:2024/06/02 07:01
package com.bwie.photoview;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.MotionEvent;import com.github.chrisbanes.photoview.PhotoView;public class MainActivity extends AppCompatActivity {    private PhotoView photo;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        photo = (PhotoView) findViewById(R.id.photoview);    }    @Override    public boolean dispatchTouchEvent(MotionEvent ev) {//       调用自己定义的OnTouchEvent方法        onTouchEvent(ev);        return true;    }    //手指按下的位置    float downX;    float downY;    //手指按下的上一次的位置    float lastX;    float lastY;    //    判断是否可以移动    boolean canMove;    //判断是单指触摸还是多指触摸    boolean isMorePoint;    @Override    public boolean onTouchEvent(MotionEvent event) {        super.onTouchEvent(event);//接收多指触控需要用 event.getAction() & MotionEvent.ACTION_MASK 来获得当前的触摸事件        switch (event.getAction() & MotionEvent.ACTION_MASK) {            case MotionEvent.ACTION_DOWN:                //设置手指按下的位置                downX = event.getX();                downY = event.getY();                //把按下的位置设置到上一次的位置,因为上一次没有值,设置成默认值                lastX = downX;                lastY = downY;                //判断当前点的位置是否是在图片内                if (downX > photo.getX() && downX < photo.getX() + photo.getWidth()                        && downY > photo.getY() && downY < photo.getY() + photo.getHeight()) {                    canMove = true;                } else {                    canMove = false;                }                break;            case MotionEvent.ACTION_MOVE://                    得到当前手指触摸的位置                float x = event.getX();                float y = event.getY();//                    计算手指移动的距离                float nowX = x - lastX;                float nowY = y - lastY;                //如果可以移动的话就重新给图片的xy设置值                if (canMove) {//                    判断是多指触摸还是单指触摸                    if (isMorePoint) {//多指触摸的时候交给PhotoView去处理,可以放大缩小                        photo.dispatchTouchEvent(event);                    } else {//单指触摸                        photo.setX(photo.getX() + nowX);                        photo.setY(photo.getY() + nowY);                    }                }                //然后重新设置当前的位置给lastX和lastY的位置                lastX = event.getX();                lastY = event.getY();                break;            case MotionEvent.ACTION_POINTER_DOWN://多指触摸按下                isMorePoint = true;                break;            case MotionEvent.ACTION_POINTER_UP://多指触摸抬起                isMorePoint = false;                break;        }        return true;    }}
原创粉丝点击