android 之View 一
2016-03-23 18:46
507 查看
1.MotionEvent
ACTION_DOWN,ACTION_UP,ACTION_MOVE
getX/getY相对当前View 左上角X ,Y
getRawX/getRawY 相对手机屏幕左上角X,Y
2. TouchSlop(常量跟设备有关,Android源码中定义为8dp)
系统所能识别的最小滑动距离
获取方式: ViewConfiguration.get(getBaseContext()).getScaledTouchSlop();返回的是像素
3. VelocityTracker
用于追踪手指在屏幕的滑动速度(有X,Y两个方向)速度可以是负值
用法:在View的onTouchEvent()
注意:不需要使用时要回收占用的内存
4. GestureDetector
检测单击,滑动,双击等行为
使用方法:
1. 创建一个GestureDetector对象并实现OnGestureListener()接口,根据需求也可以实现OnDoubleTapListener().
2. 监听自定义View的onTouchEvent方法,返回mGestureDetector.onTouchEvent
5. Scroller
用于实现View的弹性滑动
scrollerTo(),scrollerBy()只能改变view中内容位置,不能改变view在布局的位置
一个简单View 滑动例子:
ACTION_DOWN,ACTION_UP,ACTION_MOVE
getX/getY相对当前View 左上角X ,Y
getRawX/getRawY 相对手机屏幕左上角X,Y
2. TouchSlop(常量跟设备有关,Android源码中定义为8dp)
系统所能识别的最小滑动距离
获取方式: ViewConfiguration.get(getBaseContext()).getScaledTouchSlop();返回的是像素
3. VelocityTracker
用于追踪手指在屏幕的滑动速度(有X,Y两个方向)速度可以是负值
用法:在View的onTouchEvent()
@Override public boolean onTouchEvent(MotionEvent event) { //创建 VelocityTracker velocityTracker=VelocityTracker.obtain(); velocityTracker.addMovement(event); //计算 velocityTracker.computeCurrentVelocity(1000);//设定计算时间,毫秒为单位 float XVelocity=velocityTracker.getXVelocity(); float YVelocity=velocityTracker.getYVelocity(); Log.d(TAG, "XVelocity: "+XVelocity+" YVelocity: "+YVelocity); return super.onTouchEvent(event); }
注意:不需要使用时要回收占用的内存
velocityTracker.clear(); velocityTracker.recycle();
4. GestureDetector
检测单击,滑动,双击等行为
使用方法:
1. 创建一个GestureDetector对象并实现OnGestureListener()接口,根据需求也可以实现OnDoubleTapListener().
2. 监听自定义View的onTouchEvent方法,返回mGestureDetector.onTouchEvent
5. Scroller
用于实现View的弹性滑动
scrollerTo(),scrollerBy()只能改变view中内容位置,不能改变view在布局的位置
一个简单View 滑动例子:
int mLastX=0,mLastY=0; @Override public boolean onTouchEvent(MotionEvent event) { // 相对本身来滑动,也可以相对手机屏幕来滑动 int x=(int)event.getX(); int y=(int)event.getY(); switch (event.getAction()) { case MotionEvent.ACTION_DOWN: break; case MotionEvent.ACTION_MOVE: int deltaX=x-mLastX; int deltaY=y-mLastY; int translationX=(int)getTranslationX()+deltaX; int translationY=(int)getTranslationY()+deltaY; setTranslationX(translationX); setTranslationY(translationY); break; case MotionEvent.ACTION_UP: //松手后回到初始位置 setTranslationX(0); setTranslationY(0); break; } mLastX=x; mLastY=y; return true; }
相关文章推荐
- Android Fragment 真正的完全解析(上)
- 破解Android或IOS游戏包时,将原本的黑白图(png文件),彩色图(jpg)文件,合成为一张png文件
- github开源Android资源整理(十三)大神个人和组织
- Android Manager
- android:layout_weight属性的工作原理
- android的抽屉控件SlidingDrawer的使用
- Android官方开发文档Training系列课程中文版:支持不同的设备之支持不同的语言
- Android 常用的适配器总结
- Android Studio如何引入依赖包
- DRM in Android
- 一种TV(Android系统)通用焦点框的实现
- Android 之小技巧
- Andrroid四大组件之Activity生命周期
- Android控件之Toolbar + DrawerLayout的使用
- Android项目:手机安全卫士(16)—— 复杂 ListView
- Android自动化构建之Ant多渠道打包实践(下)
- iOS与Android的音频互通
- Android序列化:Parcelable/Serializable
- Android的webview加载本地html、本apk内html和远程URL
- android基础---->传感器的使用