photoView的缩放和拖拽

package com.example.dragandscalephotodemo;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.MotionEvent;

import uk.co.senab.photoview.PhotoView;

public class MainActivity extends AppCompatActivity {

    private PhotoView photoView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        photoView = (PhotoView) findViewById(R.id.photo_view);
    }

    /**
     * 事件分发的方法 ,需要activty把事件传给photoview ,photoview才能接受到我们的触摸事件
     */
    @Override
    public boolean dispatchTouchEvent(MotionEvent ev) {

        //activity接受到事件分发之后,我们手动处理触摸事件,只给传给我们自己的onTouchEvent方法;
        onTouchEvent(ev);
        return true;
    }

    //手指按下的坐标
    float downX;
    float downY;

    //手指移动前的坐标
    float lastX;
    float lastY;
    boolean moveble = false;
    boolean isMorePoint = false;

    @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 > photoView.getX()
                        && downX < photoView.getX() + photoView.getWidth()
                        && downY > photoView.getY()
                        && downY < photoView.getY() + photoView.getHeight()
                        ) {
                    moveble = true;
                } else {
                    moveble = false;
                }
                break;
            case MotionEvent.ACTION_MOVE:

                //当前手指摸出的坐标
                float currentX = event.getX();
                float currentY = event.getY();

                //我手指移动的距离
                float gapX = currentX - lastX;
                float gapY = currentY - lastY;

                //  如果点击位置不在图片上的话不做任何逻辑处理  moveble ==true 的时候做处理
                if (moveble) {
                    if (isMorePoint) {
                        //多指的时候 把事件交给photoview去处理 ,它自己会根据事件去做放大缩小的逻辑 ,
                        photoView.dispatchTouchEvent(event);
                    } else {
                        //单指的时候  拖拽的逻辑  设置图片新的位置    ==    原来的位置 + 手指移动的距离
                        photoView.setX(photoView.getX() + gapX);
                        photoView.setY(photoView.getY() + gapY);
                    }
                }
                lastX = event.getX();
                lastY = event.getY();
                break;
            case MotionEvent.ACTION_UP:

                break;

            //除了第一个手指之外别的手指按下时触发
            case MotionEvent.ACTION_POINTER_DOWN:
                isMorePoint = true;
                break;
            //除了第一个手指之外别的手指抬起时触发
            case MotionEvent.ACTION_POINTER_UP:
                isMorePoint = false;
                break;
        }

        return true;
    }

}



布局文件

<uk.co.senab.photoview.PhotoView
        android:src="@drawable/brad_pitt"
        android:id="@+id/photo_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值