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;
    }
}
相关推荐
ZFJ_张福杰4 分钟前
【Flutter】GetX最佳实践与避坑指南
android·flutter·ios·getx
一直向钱7 小时前
android 基于okhttp的socket封装
android·okhttp
夜晚中的人海8 小时前
【C++】异常介绍
android·java·c++
蜀中廖化12 小时前
Android Studio 导入 opencv
android·opencv·android studio
奋斗的小鹰13 小时前
ASM Bytecode Viewer 插件查看kotlin和java文件的字节码
android·kotlin·asm
欢喜躲在眉梢里15 小时前
mysql中的日志
android·运维·数据库·mysql·adb·日志·mysql日志
路上^_^16 小时前
安卓基础组件019-引导页布局001
android·安卓
梦终剧17 小时前
【Android之路】UI消息循环机制
android·ui
zh_xuan17 小时前
Android android.util.LruCache源码阅读
android·源码阅读·lrucache
梦终剧17 小时前
【Android之路】安卓资源与编译初步
android