Android开发艺术探索(连载)之View 的事件体系(一)view的基本知识

来源:互联网 发布:朗读语文课文软件 编辑:程序博客网 时间:2024/05/17 07:58

一,View的位置参数关系:

1.view 的基础概念(略);

2.View中的top,bottom,left,right的表示内容:

 

所以view的宽高:

Width = right - left;

Height = bottom - top;

 

top,bottom,left,right的获取:getTop();getBottom();getLeft();getRight();

3.Android3.0开始View增加了x,y,TranslationX,translationY

X:view左上角横坐标;

Y:view左上角纵坐标;

TranslationX : 横偏移量;

TranslationY : 纵偏移量;

X = left + TranslationX;

Y= top + TranslationY;

*注意:view在平移的过程中,top,left表示的是原始的位置信息,其值并不会发送改变,此时发生改变的是x,y,TranslationX,translationY

实际上就是TranslationX,translationY

 

二,ViewMotionEventTouchSlop:

1.MotionEvent:指在手指触屏幕后所产生的一系列事件:

ACTION_DOWN : 手指刚接触屏幕;

ACTION_MOVE : 手指的屏幕上移动;

ACTION_UP : 手指从屏幕上松开的一瞬间;

所以点击事件触发的情况:

1:Down->UP;

2:Down->move->move->……->Up;

为此我们可以得到点击事件x,y,的坐标;

通过getX();getY();得到相对当前Viewx,y;

通过getRawX();getRawY();得到相对手机屏幕的x,y;

 

2.TouchSlop:是系统所能识别出的最小滑动的最小距离,如果手指滑动的距离小于这个常量的话,系统将不会认为它是滑动的;它是个常量和设备有关;获取方法:ViewConfiguration.get(getContext()).getScaledTouchSlop();

使用情况:当我们再处理滑动时,可以利用这个常量做一些过滤,比如当两次滑动事件的滑动距离小于这个值,我们可以认为未达到滑动的临界值,因此认为它是不滑动的。

 

三,VelocityTracker ,GestureDetectorScroller

1.VelocityTracker :速度追踪,用于追踪手指在滑动的过程中的速度,包括水平和垂直方向的速度。

使用过程:在viewonTouchEvent方法中{

VelocityTracker velocityTracker = VelocityTracker.obtain();

velocityTracer.addMovement(event);

velocityTracker.computeVelocity(1000);//必须先调用,1s

Int xVelocity = (int )velocityTracker.getXVelocity();

Int yVelocity = (int )velocityTracker.getYVelocity();

}

速率可为负值;

速度 = (终点位置 - 起点位置)/时间段;

顺坐标系方向为正值,逆坐标系方向为负值;

*当我们不用时需要将它释放,减少内存:

{

velocityTracker.clear();

velocityTracker.recycle();

}

 

2.GestureDetector : 手势检测,用于辅助检测用户的单击,滑动,长按,双击等行为。

使用GestureDetector过程:

1:创建一个GestureDetector对象并实现OnGestureListener接口,根据需要我们还可以实现onDoubleTapListener从而能够监听双击行为;

{

GestureDetector mGestureDetector = new GestureDetector(this);

//解决长按屏幕后无法拖动的现象

mGestureDetector.setIsLongpressEnabled(false);

}

2:接着接管目标ViewonTouchEven方法,在监听ViewonTouchEvent方法中添加如下实现:

{

Boolean consume = mGestureDetector.onTouchEvent(event);

Return consume;

}

onGestureListeneronDoubleTapListener中方法介绍:

 


 

 

 

3.Scroller :弹性滑动对象,用于实现View的弹性滑动,当我们使用ViewscrollTo/scrollBy方法来进行滑动时,其过程是瞬间完成的,这个没有过度效果用户体验并不好。使用scroll可以实现过渡效果的滑动。

Scroll本身无法让View弹性滑动,需要和ViewComputeScroll方法配合使用才能共同完成这个功能。

使用方法:

 

{

Scroller mScroller = new scroller(mContext);

 

//缓慢滚到指定位置

Private void smoothScrollTo(int destX,int destY){

Int scrollX = getScrollX();

Int delta = destX - scrollX;

//1000ms 内滑向destX,效果就是慢慢滑动

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

Invalidate();

}

 

Public void computeScroll(){

If(mScroller.conputeScrollOffset()){

scrollTo(mScroller.getCurrX(),mScroller.getCurrY());

ostInvalidate();

}

}

}

 

下节对代码详细解释。


需要word格式的同学可以联系我qq:673080885

0 0
原创粉丝点击