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;
    }
}
相关推荐
BoomHe12 小时前
Android Framework 文件应用移植到 AndroidStudio
android
传奇开心果编程13 小时前
【Jetpack Compose基础语法学与练】第8课 rememberSaveable,页面旋转/系统重建保留状态
android·学习·ui·kotlin·android jetpack
>Andre<14 小时前
UFS5.0标准中文全译·卷一:范围、术语与架构
android·linux·嵌入式硬件
事圆则缓14 小时前
Java 8 Lambda、Stream、Optional 与 Android 边界:从回调语法到运行时兼容
android·java
mmsx15 小时前
Android 地图十万要素不卡顿:空间网格 + 渐进式加载的移动端实践
android·大数据·opengl
Godikov16 小时前
Android 工业终端保活实战:前台服务 + 开机自启 + 更新自启的三重保障
android
字节暗面16 小时前
SO加固强度怎么量化?腾讯ACE与FairGuard静态分析实测
android·逆向
终端安全笔记18 小时前
描述文件、企业证书、MDM 不是三个名字,是三层
android·ios·智能手机
字节暗面18 小时前
一次游戏安全SO静态分析记录:腾讯ACE与FairGuard加固强度对比
android·逆向工程·游戏加固
传奇开心果编程18 小时前
【Jetpack Compose基础语法学与练】第9课 SideEffect副作用 + LaunchedEffect,处理异步任务和生命周期
android·学习·ui·kotlin·android jetpack