博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
实现可拖拽View 工具类
阅读量:5878 次
发布时间:2019-06-19

本文共 2597 字,大约阅读时间需要 8 分钟。

  hot3.png

工具是一个FrameLayout,用的时候把需要实现拖拽的view放进去就可以了。

没有事件冲突的问题。

package com.reone.loushi.customView;import android.content.Context;import android.util.AttributeSet;import android.view.MotionEvent;import android.view.WindowManager;import android.widget.FrameLayout;/** * Created by wangxingsheng on 2017/1/15. * */public class DragLayout extends FrameLayout {    private int lastX;    private int lastY;    private int screenWidth;    private int screenHeight;    public DragLayout(Context context) {        super(context);        init();    }    public DragLayout(Context context, AttributeSet attrs) {        super(context, attrs);        init();    }    public DragLayout(Context context, AttributeSet attrs, int defStyle) {        super(context, attrs, defStyle);        init();    }    public void init() {        WindowManager wm = (WindowManager) getContext().getSystemService(Context.WINDOW_SERVICE);        screenWidth = wm.getDefaultDisplay().getWidth();        screenHeight = wm.getDefaultDisplay().getHeight();    }    @Override    public boolean dispatchTouchEvent(MotionEvent event) {        int ea = event.getAction();            switch (ea) {                case MotionEvent.ACTION_DOWN:                    lastX = (int) event.getRawX();                    lastY = (int) event.getRawY();//按钮初始的横纵坐标                    break;                case MotionEvent.ACTION_MOVE:                    int dx = (int) event.getRawX()-lastX;                    int dy = (int) event.getRawY()-lastY;//按钮被移动的距离                    int l = getLeft()+dx;                    int b = getBottom()+dy;                    int r = getRight()+dx;                    int t = getTop()+dy;                    if(l<0){//处理按钮被移动到上下左右四个边缘时的情况,决定着按钮不会被移动到屏幕外边去                        l = 0;                        r = l+getWidth();                    }                    if(t<0){                        t = 0;                        b = t+getHeight();                    }                    if(r>screenWidth){                        r = screenWidth;                        l = r - getWidth();                    }                    if(b>screenHeight){                        b = screenHeight;                        t = b-getHeight();                    }                    layout(l, t, r, b);                    lastX = (int) event.getRawX();                    lastY = (int) event.getRawY();                    postInvalidate();                    break;                default:                    break;            }        return super.dispatchTouchEvent(event);    }}

原文地址:

转载于:https://my.oschina.net/reone/blog/825133

你可能感兴趣的文章
看雪CTF第十四题
查看>>
模拟生命_吸烟致癌?
查看>>
[Contiki系列论文之1]Contiki——为微传感器网络而生的轻量级的、灵活的操作系统...
查看>>
Android 网络编程 记录
查看>>
微软同步发行Windows 10和Windows 10 Mobile系统更新
查看>>
Maven 传递依赖冲突解决(了解)
查看>>
Zeppelin的入门使用系列之使用Zeppelin运行shell命令(二)
查看>>
[Spark][Python]Spark Join 小例子
查看>>
form表单下的button按钮会自动提交表单的问题
查看>>
大战设计模式【11】—— 模板方法模式
查看>>
springBoot介绍
查看>>
Intellij IDEA 快捷键整理
查看>>
Redis 通用操作2
查看>>
11. Spring Boot JPA 连接数据库
查看>>
洛谷P2925 [USACO08DEC]干草出售Hay For Sale
查看>>
MapReduce工作原理流程简介
查看>>
那些年追过的......写过的技术博客
查看>>
小米手机解锁bootload教程及常见问题
查看>>
Python内置函数property()使用实例
查看>>
Spring MVC NoClassDefFoundError 问题的解决方法。
查看>>