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;
    }
}
相关推荐
一条上岸小咸鱼2 分钟前
Kotlin 基本数据类型(五):Array
android·前端·kotlin
whysqwhw19 分钟前
Room&Paging
android
whysqwhw25 分钟前
RecyclerView超长列表优化
android
Tiger_Hu35 分钟前
Android系统日历探索
android
whysqwhw36 分钟前
RecyclerView卡顿
android
whysqwhw40 分钟前
RecyclerView 与 ListView 在性能优化方面
android
檀越剑指大厂4 小时前
容器化 Android 开发效率:cpolar 内网穿透服务优化远程协作流程
android
MiyamuraMiyako5 小时前
从 0 到发布:Gradle 插件双平台(MavenCentral + Plugin Portal)发布记录与避坑
android
NRatel5 小时前
Unity 游戏提升 Android TargetVersion 相关记录
android·游戏·unity·提升版本
叽哥8 小时前
Kotlin学习第 1 课:Kotlin 入门准备:搭建学习环境与认知基础
android·java·kotlin