android 跟随手指移动的 view
2016-03-15 17:50
555 查看
使用方法:
**LinearLayout mLinearLayout = (LinearLayout)findViewById(R.id.ll);
mLinearLayout.setOnTouchListener(new MoveViewWithFingerTouchListener());**
**LinearLayout mLinearLayout = (LinearLayout)findViewById(R.id.ll);
mLinearLayout.setOnTouchListener(new MoveViewWithFingerTouchListener());**
package com.xxx.view; import android.annotation.SuppressLint; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; /** * * @Title: MoveViewWithFingerTouchListener.java * @Description: 跟随手指移动的 view * @ref http://blog.csdn.net/jason0539/article/details/42743531 */ @SuppressLint("ClickableViewAccessibility") public class MoveViewWithFingerTouchListener implements View.OnTouchListener { private int _rawX = 0; private int _rawY = 0; @Override public boolean onTouch(View v, MotionEvent event) { ViewGroup parentView = (ViewGroup) v.getParent(); int parentWidth = parentView.getWidth(); int parentHeight = parentView.getHeight(); // 当前手指触摸位置坐标,用于重新计算 int rawX = (int) event.getRawX(); int rawY = (int) event.getRawY(); switch (event.getAction() & MotionEvent.ACTION_MASK) { case MotionEvent.ACTION_MOVE: // 上次和本次 手指触摸位置坐标 移动的 距离差 int deltaX = rawX - _rawX; int deltaY = rawY - _rawY; // 上一次 控件左上角定点的位置坐标 int _x = (int) v.getLeft(); int _y = (int) v.getTop(); // 目标位置 控件左上角定点的位置坐标 int x = deltaX + _x; int y = deltaY + _y; //缓冲手指坐标 _rawX = rawX; _rawY = rawY; // 左上 边界控制 if (x <= 1) { x = 1; } if (y <= 1) { y = 1; } // 右下边界控制 if (x + v.getWidth() >= parentWidth - 1) { x = parentWidth - v.getWidth() - 1; } if (y + v.getHeight() >= parentHeight - 1) { y = parentHeight - v.getHeight() - 1; } v.layout(x, y, x + v.getWidth(), y + v.getHeight()); break; case MotionEvent.ACTION_DOWN: // 初始化首次 手指触摸点的坐标 _rawX = (int) event.getRawX(); _rawY = (int) event.getRawY(); break; } return true; } }
相关文章推荐
- Android 中 View 炸裂特效的实现分析
- Android View体系(六)从源码解析Activity的构成
- 关于BroadCastReceiver无法接收到广播的问题
- 仿ios9风格的Android 分享dialog
- 关于Android在线直播问题的讨论与研究
- Android高效加载大图、多图解决方案,有效避免程序OOM
- Android Studio中git的设置
- Android系统性能调优工具介绍
- 详解Androidstudio编写的APK过大的问题
- 学校Android客户端共享上网的原理
- Android Gesture
- Android四大组件之Service
- Android Studio导出Jar包
- Android获取控件大小的方法
- android listview 下拉头部图片拉伸
- Android实际开发中用到的线程池
- Android Studio导出Jar包
- 【Android】Ant打包签名时中文alias怎么办
- Android中解析XML
- Android图片加载神器之Fresco-加载图片基础[详细图解Fresco的使用]