您的位置:首页 > 移动开发 > Android开发

Android中延迟执行某个任务

2018-01-04 10:40 295 查看

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方法配合才能共同完成这个功能。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: