Android 实现可拖动的ImageView

Android 实现可拖动的ImageView


代码实现:

java 复制代码
public class DraggableImageView extends AppCompatImageView {

    private float lastTouchX;
    private float lastTouchY;

    public DraggableImageView(Context context) {
        super(context);
        init();
    }

    public DraggableImageView(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    public DraggableImageView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init();
    }

    private void init() {
        setClickable(true);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        final int action = event.getActionMasked();
        switch (action) {
            case MotionEvent.ACTION_DOWN:
                lastTouchX = event.getRawX();
                lastTouchY = event.getRawY();
                break;

            case MotionEvent.ACTION_MOVE:
                float x = event.getRawX();
                float y = event.getRawY();

                x = Math.max(0,x);
                y = Math.max(0,y);


                float dx = x - lastTouchX;
                float dy = y - lastTouchY;
				//边界控制
                ViewGroup pa = (ViewGroup) getParent();
                float lx = Math.max(0,dx+getX());
                float ly = Math.max(0,dy+getY());
                lx = Math.min(lx,pa.getWidth()-getWidth());
                ly = Math.min(ly,pa.getHeight()-getHeight());

                setX(lx);
                setY(ly);



                lastTouchX = x;
                lastTouchY = y;
                break;

            case MotionEvent.ACTION_UP:
            case MotionEvent.ACTION_CANCEL:
                break;

            case MotionEvent.ACTION_POINTER_UP:

                lastTouchX = event.getRawX();
                lastTouchY = event.getRawX();
                break;
        }
        return true;
    }
}
相关推荐
恋猫de小郭7 分钟前
Flutter 3.44 发布啦,超级大版本更新!!!
android·flutter·ios
zb2006412013 分钟前
Laravel10.x重磅升级:新特性全解析
android
2601_9574188020 分钟前
深入解析Android相机有线连接:PTP与MTP协议栈实现原理与实践
android·数码相机·智能手机
努力努力再努力wz31 分钟前
【QT入门系列】QWidget 六大常用属性详解:windowOpacity、cursor、font、focus、toolTip 与 styleSheet
android·开发语言·数据结构·c++·qt·mysql·算法
撩得Android一次心动35 分钟前
C语言基础笔记3【个人用】
android·c语言·开发语言·笔记
小离a_a44 分钟前
uniapp小程序封装圆环显示比例数据
android·小程序·uni-app
三少爷的鞋1 小时前
Android 面试系列:runBlocking 到底该在哪用?
android
DogDaoDao9 小时前
Android 硬件编码器参数完全指南:MediaCodec 深度解析
android·音视频·视频编解码·h264·硬编码·视频直播·mediacodec
JohnnyDeng9410 小时前
Android 自定义 View:Canvas 绘图与事件分发深度解析
android
Android小码家13 小时前
Framework之Launcher小窗开发
android·framework·虚拟屏·小窗