自定义随手指拖动的View
来源:互联网 发布:java多线程常用方法 编辑:程序博客网 时间:2024/04/29 23:27
项目中遇到一个可随意跟随手指拖动的电话按钮,网上一搜基本上都是,先在布局文件中写一个button或ImageView,然后找到这个控件,重写ontouch方法,并不是我想要的,然后就自定义一个可随手机拖动的View。 我这里是集成ImageView写的,大家要使用时,可随意集成某个控件来写。其实也是很简单好实现的,原理就是重写控件本身onTouchEvent,然后在move方法中,让其跟随触摸拖动的动作滑动。 这里主要解决两个问题:①避免手指拖动时触发其点击事件问题; ② 滑出边缘的问题。
先看一下效果
- 为了避免滑出手机屏幕边界,首先要获取手机屏幕宽高
获取手机屏幕宽高的工具类
class ScreenUtils { /** * 获取手机屏幕大小 * * @author */ public static int getWidth(Context context) { WindowManager wm = (WindowManager) context .getSystemService(Context.WINDOW_SERVICE); DisplayMetrics outMetrics = new DisplayMetrics(); wm.getDefaultDisplay().getMetrics(outMetrics); return outMetrics.widthPixels; } /** * 高 * * @return */ public static int getHeight(Context context) { WindowManager wm = (WindowManager) context .getSystemService(Context.WINDOW_SERVICE); DisplayMetrics outMetrics = new DisplayMetrics(); wm.getDefaultDisplay().getMetrics(outMetrics); return outMetrics.heightPixels; }
- 自定义view最主要的部分,重写本身的onTouchEvent方法
@Override public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: lastX = (int) event.getRawX(); lastY = (int) event.getRawY(); movex = lastX; movey = lastY; break; case MotionEvent.ACTION_MOVE: dx = (int) event.getRawX() - lastX; dy = (int) event.getRawY() - lastY; int left = getLeft() + dx; int top = getTop() + dy; int right = getRight() + dx; int bottom = getBottom() + dy; if (left < 0) { left = 0; right = left + getWidth(); } if (right > screenWidth) { right = screenWidth; left = right - getWidth(); } if (top < 0) { top = 0; bottom = top + getHeight(); } if (bottom > screenHeight) { bottom = screenHeight; top = bottom - getHeight(); } layout(left, top, right, bottom); lastX = (int) event.getRawX(); lastY = (int) event.getRawY(); break; case MotionEvent.ACTION_UP: break; default: break; } return super.onTouchEvent(event); }
- 一般这样这个自定义控件就能够跟随手机随意拖动了,但你要是添加点击事件后,拖动就会触发点击事件,这里就需要简单处理一下。
在MotionEvent.ACTION_UP中做下处理
case MotionEvent.ACTION_UP: //避免滑出触发点击事件 if ((int) (event.getRawX() - movex) != 0 || (int) (event.getRawY() - movey) != 0) { return true; } break;
到这一个简单的自定义随手指随意拖动的ImageView就已经实现了!
资源路径:http://download.csdn.net/download/zane_xiao/9494690
0 0
- 自定义随手指拖动的View
- 简单实现自定义View随手指拖动
- 自定义View:点、图片随手指而移动的View
- 自定义View随手指滑动
- Android 自定义View之随手指滑动的ToggleButton
- 自定义随机颜色的圆形小球view随手指移动
- Android view的随手指拖动 仿IOS的悬浮圆圈效果
- 自定义view实现随手移动的圆球
- 自定义View(板块随手指移动)
- 自定义view 小圆点随手指滑动
- 自定义View组件 随手指球
- 自定义view圆并随手指移动
- 自定义view视图,小球随手指动
- 随手指拖动而变色的ScrollView
- 一个随手指移动的自定义View和一个随手指移动的ImageView(附源码)
- 自定义VIEW,可拖动的控件
- 自定义view实现随手指移动的小球及画轨迹
- Android之自定义View实现随手势滑动的控件
- XX项目的现状与对策
- 全屏播放swf视频
- Linux search file path
- LeetCode 39. Combination Sum
- CALayer的介绍
- 自定义随手指拖动的View
- 【追求进步】扑克牌顺子
- 安卓开发 更改项目包名
- 说一下我对Mvvm模式的理解
- vpn连接错误
- Java自带的性能检测工具介绍
- 机器学习中常见问题_几种梯度下降法
- ubutun以太网显示灰色并且是委托管状态
- 智能家居体验