view的基础知识

来源:互联网 发布:淘宝内裤拍摄 原图 编辑:程序博客网 时间:2024/06/05 18:31

    View的位置由4个参数决定,left、right、top、bottom,可以用下图来表明他们的含义:

    

    这些数值都是相对于父容器而言的,不是屏幕。通过getLeft等方法可以获得这些值。

    需要注意的是,这4个参数的值在视图被画制时就会固定不变,当它发生移动时,通过ranslationX/Y和x/y的值的改变来表示移动情况,这些值也是相对父容器而言的。通过getRawX/Y可以获得相对屏幕的距离。


    TouchSlop是View最小的、可以被系统识别的滑动距离,可以通过ViewConfiguration.get(getContext())获得View的配置类,然后在调用配置类的getScaledTouchSlop()方法来获得最小滑动距离。


    VelocityTracker是速度跟踪器,通过VelocityTracker.obtain()来获得实例(也就意味着需要被回收),获得实例后往速度跟踪器里添加需要计算的滑动事件对象,比如velocityTracker.addMovement(event),然后调用计算方法计算这个事件对象,比如velocityTracker.computeCurrentVelocity(单位),然后就得到了具有速度值的velocityTracker的实例,然后就可以通过getX/YVelocity()来获得某个方向上的速度。需要注意的是,速度是矢量值,也就是有正负值的,用正负值表示方法;另外,使用完以后,要clear里面的事件对象,然后用recycle回收跟踪器。


    GestureDetector是手势检测器,算是原View手势检测的加强版吧,它可以监听双击,长按等事件。要使用它需要先继承自它的接口,比如基本功能接口OnGestureListener,扩展接口OnDoubleTapListener,然后在创建实例时传进视图实例,或者是使用匿名内部类来创建也可以。为了和View原有的检测器不冲突,需要在原有检测方法里接管事件,也就是在View的onTouchEvent里接管,具体的方法是调用手势检测器的onTouchEvent,把事件传递给它,然后返回值由它的onTouchEvent来决定。接管以后,当有相应的事件传进来时,就会调用GestureDetector接口需要我们重写的方法,不同方法对应的事件类型如下:

     

    另外,使用GestureDelector还可以解决长按后不能移动视图的问题,使用实例的setIsLongpressEnabled(false)来设置不可以长按。


    


原创粉丝点击