View基础知识(1)

View是所有控件的基类,是一种界面层的控件的一种抽象。

1.1 View的位置参数 一共8个
View主要由四个顶点决定,分别对应View的四个属性:top、left、right、bottom
top是左上角纵坐标,left是左上角横坐标,right是右下角横坐标,bottom是右下角纵坐标
(注意这里面的参数是相对于View的父容器来说的)

获取这些参数的方法:
Left=getLeft()   Right=getRight()   Top=getTop()   Bottom=getBottom()

在android3.0以后,View额外增加了几个参数 x , y , translationX 和translationY 也是相对于父容器的偏移量
其中x,y是指View左上角的坐标,translationX和translationY是View的左上角相对于父容器的偏移量(默认值为0)

特殊的情况:View在平移的过程中,top和left表示的是原始的左上角位置信息,值不会发生变化但是x,y,translationX,translationY的值会发生变化
            x=left+translationX
            y=top+translationY
1.2 View的事件触发
  MotionEvent 典型的事件类型有以下几种
     ~ ACTION_DOWN  手指刚接触屏幕
     ~ ACTION_MOVE  手指在屏幕上移动
     ~ ACTION_UP    手指从屏幕上松开的一瞬间 

  下面的几种正常的操作
      ~ 点击屏幕后离开松开,事件的序列为 Down->Up
      ~ 点击屏幕滑动一会儿,事件序列为 Down->MOVE->...->Up

  TouchSlop系统所能识别的滑动最小距离 通过下面获取 ViewConfiguration.get(getContext()).getScaledTouchSlop()
1.3 VelocityTracker , GestureDetector , Scroller
  <1>  VelocityTracker: 速度追踪,用于追踪手指在滑动过程中的速度,包括水平和竖直方向 //每秒在该方向滑动的像素值  速度=(终点位置-起点位置)/时间段
   使用方法:
    ~ 在View的onTouchEvent方法中追踪当前点击事件的速度  VelocityTracker velocityTracker = VelocityTracker.obtain();                                                                  velocityTracker.addMovement(event);
   ~接着,当我们想知道当前的滑动速度,可以采取下面的方式                                                                   velocityTracker.computeCurrentVelocity(1000);//表示时间单元和时间间隔                                                                 int xVelocity=(int)velocityTracker.getXVelocity();                                                              int yVelocity=(int)velocityTracker.getYVelocity();
  ~ 清理内存 velocityTracker.clear(); velocityTracker.recycle();

<2> GestureDetector 手势检测,用于检测用户的 单击,双击,滑动,长按
    使用方法:~ 首先创建GestureDetector对象并实现 OnGestureListener接口 还可以实现 OnDoubleTapListener (用于监听双击行为)                                               GestureDetector mGestureDetector = new GestureDetector(this);
 //解决长按屏幕后无法拖动的现象                                       mGestureDetector.setIsLongpressEnabled(false);
      ~ 接着,在接管View 的onTouchEvent方法中,在待监听View 的onTouchEvent方法中如下实现
    boolean consume=mGestureDetector.onTouchEvent(event);
            return consume ;
     ~ 就可以有选择地实现 OnGestureListener 和 OnDoubleTapListener的方法了,让该View实现这两个接口
   ~使用 GestureDetector 和MotionEvent 的区别 : 可以不使用 GestureDetector ,但是推荐实现监听双击这种行为时候,使用 GestureDetector
  <3> Scroller 弹性滑动对象,用于实现View的弹性滑动
      View可以通过调用 scrollTo/scrollBy方法进行滑动,但是过程是瞬间完成的,但是Scroller可以实现过渡效果的滑动
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值