您的位置:首页 > 移动开发 > Android开发

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

2017-01-20 15:39 627 查看
一,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;
 
二,View的MotionEvent和
TouchSlop:

1.MotionEvent:指在手指触屏幕后所产生的一系列事件:
ACTION_DOWN : 手指刚接触屏幕;
ACTION_MOVE : 手指的屏幕上移动;
ACTION_UP : 手指从屏幕上松开的一瞬间;
所以点击事件触发的情况:
1:Down->UP;
2:Down->move->move->……->Up;
为此我们可以得到点击事件x,y,的坐标;
通过getX();getY();得到相对当前View的x,y;
通过getRawX();getRawY();得到相对手机屏幕的x,y;
 
2.TouchSlop:是系统所能识别出的最小滑动的最小距离,如果手指滑动的距离小于这个常量的话,系统将不会认为它是滑动的;它是个常量和设备有关;获取方法:ViewConfiguration.get(getContext()).getScaledTouchSlop();
使用情况:当我们再处理滑动时,可以利用这个常量做一些过滤,比如当两次滑动事件的滑动距离小于这个值,我们可以认为未达到滑动的临界值,因此认为它是不滑动的。
 
三,VelocityTracker ,GestureDetector和Scroller
1.VelocityTracker :速度追踪,用于追踪手指在滑动的过程中的速度,包括水平和垂直方向的速度。
使用过程:在view的onTouchEvent方法中{
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:接着接管目标View的onTouchEven方法,在监听View的onTouchEvent方法中添加如下实现:
{
Boolean consume = mGestureDetector.onTouchEvent(event);
Return consume;
}
onGestureListener和onDoubleTapListener中方法介绍:
 




 


 
 
3.Scroller :弹性滑动对象,用于实现View的弹性滑动,当我们使用View的scrollTo/scrollBy方法来进行滑动时,其过程是瞬间完成的,这个没有过度效果用户体验并不好。使用scroll可以实现过渡效果的滑动。
Scroll本身无法让View弹性滑动,需要和View的ComputeScroll方法配合使用才能共同完成这个功能。
使用方法:
 
{
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();
}
}
}
 
下节对代码详细解释。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: