View基础知识

View的位置参数

  • top: 左上角的纵坐标
  • left: 左上角的横坐标
  • right: 右下角的横坐标
  • bottom: 右下角的纵坐标

Attention: View在平移过程中,top和left表示的是原始左上角的位置信息,不改变,改变的是x, y, translationX 和 translationY;

View的实现

@UiThread
public class View implements Drawable.Callback, KeyEvent.Callback,
        AccessibilityEventSource {

MotionEvent

  • ACTION_DOWN 手指刚接触屏幕
  • ACTION_MOVE 手指在屏幕上移动
  • ACTION_UP 手机从屏幕上 松开的一瞬间
  • 点击屏幕离开后松开,时间序列为DOWN->UP;
  • 点击屏幕滑动一会再松开,事件序列为DOWN->MOVE->…>MOVE->UP.

  • getX/getY返回的是相对于当前View左上角的X和Y坐标

  • getRawX/getRawY返回的是相当于手机屏幕左上角的X和Y的坐标。

TouchSlop

系统所能识别出的被认为是滑动的最小的距离。
- 获取

ViewConfiguration.get(getContext()).getScaledTouchSlop().

VelocityTracker

速度追踪,用于追踪手指在滑动过程中的速度,包括水平和数值方向的速度。
- 使用过程
在View的onTouchEvent方法中

VelocityTracker velocityTracker = VelocityTracker.obtain();
velocityTracker.addMovement(event);

velocityTracker.computeCurrentVelocity(1000)//根据传入的时间间隔计算相应的速度,单位ms
int xVelocity = (int) velocityTracker.getXVelocity();
int yVelocity = (int) velocityTracker.getYVelocity();
velocityTracker.clear();
velocityTracker.recycle();//使用完成,清空

GestureDetector

手势检测,用于辅助检测,单击,滑动,长按,双击等行为。
在实际的开发中可以不使用GestureDetector,完全可以在自己的View和onTouchEvent方法中实现所需的监听;
双击行为最好使用GestureDetector

Scroller

弹性滑动

    Scroller mScroller = new Scroller(this.getContext());

    private void smoothScrollTo(int destX, int destY) {
        int scrollX = getScrollX();
        int delta = destX - scrollX;

        mScroller.startScroll(scrollX, 0, delta, 0, 1000);
        invalidate();
    }

    public void computeScroll() {
        if (mScroller.computeScrollOffset()) {
            scrollTo(mScroller.getCurrX(), mScroller.getCurrY());
            postInvalidate();
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值