Android中延迟执行某个任务
程序员文章站
2022-07-14 17:58:27
...
Android基础
View的基础知识
-
View的位置主要由它的四个顶点来决定;分别对应于View的四个属性:Top,Bottom,Left,right;四个值是相对于父容器的。
- Left = getLeft();
- Right = getRight();
- Top = getTop();
- Bottom = getBottom();
Android 3.0 添加的参数:x,y(x,y表示View的左上角的坐标,相对于父容器);translationX,translationY(表示VIew左上角相对于父容器的偏移量,默认为0)。
View在平移过程中,top,left不会发生改变的,改变的是x,y,transLationX和translationY的值。
-
MotionEvent是手指接触屏幕之后产生的以下列事件,主要包括(ACTION_DOWN,ACTION_UP,ACTION_UP)。
- 点击事件时间序列:DOWN —> UP;
- 滑动事件序列:DOWN —> MOVE —> … —> MOVE —> UP;
-
通过MotionEvent对象可以获取发生点击事件的x,y坐标;
- getX / getY :该点击位置相对于VIew左上角的x,y坐标;
- getRawX / getRawY :该点击位置相对于手机屏幕左上方的x,y坐标;
-
TouchSlop 是系统所能识别的被认为是最小的滑动距离,这是一个常量,和设备有关。
- 通过ViewConfiguration.get(getContext()).getScaledTouchSlop()获得。
- 这个常量的意义在于处理滑动时可以通过这个值来做一些过滤。
-
VelocityTracker 速度追踪,用于追踪手指在滑动过程中的速度。
- 在View的onTouchEvent方法中:
VelocityTracker velocitTracker = VelocityTracker.obtain();
velocitTracker.addMovement(event);
velocitTracker.computeCurrentVelocity(1000);
int xVelocity = (int) velocitTracker.getXVeloticy();
int yVelocity = (int) velocitTracker.getYVeloticy();
...
velocitTracker.clear();
velocitTracker.recycle();
- 获取速度前必须先计算速度,即computeCurrentVelocity()方法,单位毫秒;
- 速度是指该段时间内,手指划过的像素数;
- 速度可以为负值(水平方向右向左为负值);
-
当不需要它的时候,通过clear()来重置并回收内存;
- GestureDetector 手势检测,用于辅助检测用户的单击,长按,滑动,双击等行为。
- 创建对象并实现监听器的onGestureListener或OnDoubleTapListener接口:
GestureDetector mGestureDetector = new GestureDetector(this);
//解决长按屏幕后无法拖动的现象
mGestureDetector.setIsLongpressEnabled(false);
- 接管View的onTouchEvent方法,在待监听的View的onTouch方法中添加以下代码:
boolean consume = mGestureDetector.onTouchEvent(event);
return consume;
-
如果只是监听滑动相关的,建议自己在onTouchEvent中实现,如果要监听双击这种行为的话,那么就是用GestureDetector。
- Scroller 弹性滑动对象,用于实现View的弹性滑动(平移滑动比较生硬)。Scroller本身无法让View滑动,它需要和View的computeScroll方法配合才能共同完成这个功能。
上一篇: 每日刷题_牛客_删除公共字符