欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Android中延迟执行某个任务

程序员文章站 2022-07-14 17:58:27
...

Android基础

View的基础知识

  1. View的位置主要由它的四个顶点来决定;分别对应于View的四个属性:Top,Bottom,Left,right;四个值是相对于父容器的。

    • Left = getLeft();
    • Right = getRight();
    • Top = getTop();
    • Bottom = getBottom();
  2. Android 3.0 添加的参数:x,y(x,y表示View的左上角的坐标,相对于父容器);translationX,translationY(表示VIew左上角相对于父容器的偏移量,默认为0)。

  3. View在平移过程中,top,left不会发生改变的,改变的是x,y,transLationX和translationY的值。

  4. MotionEvent是手指接触屏幕之后产生的以下列事件,主要包括(ACTION_DOWN,ACTION_UP,ACTION_UP)。

    • 点击事件时间序列:DOWN —> UP;
    • 滑动事件序列:DOWN —> MOVE —> … —> MOVE —> UP;
  5. 通过MotionEvent对象可以获取发生点击事件的x,y坐标;

    • getX / getY :该点击位置相对于VIew左上角的x,y坐标;
    • getRawX / getRawY :该点击位置相对于手机屏幕左上方的x,y坐标;
  6. TouchSlop 是系统所能识别的被认为是最小的滑动距离,这是一个常量,和设备有关。

    • 通过ViewConfiguration.get(getContext()).getScaledTouchSlop()获得。
    • 这个常量的意义在于处理滑动时可以通过这个值来做一些过滤。
  7. 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()来重置并回收内存;

    1. GestureDetector 手势检测,用于辅助检测用户的单击,长按,滑动,双击等行为。
  • 创建对象并实现监听器的onGestureListener或OnDoubleTapListener接口:
GestureDetector mGestureDetector = new GestureDetector(this);
//解决长按屏幕后无法拖动的现象
mGestureDetector.setIsLongpressEnabled(false);
  • 接管View的onTouchEvent方法,在待监听的View的onTouch方法中添加以下代码:
boolean consume = mGestureDetector.onTouchEvent(event);
return consume;
  • 如果只是监听滑动相关的,建议自己在onTouchEvent中实现,如果要监听双击这种行为的话,那么就是用GestureDetector。

    1. Scroller 弹性滑动对象,用于实现View的弹性滑动(平移滑动比较生硬)。Scroller本身无法让View滑动,它需要和View的computeScroll方法配合才能共同完成这个功能。