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();
}
}
}
下节对代码详细解释。
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();
}
}
}
下节对代码详细解释。
相关文章推荐
- 《Android 开发艺术探索》——View 事件体系--View基础知识 (学习笔记)
- 《Android 开发艺术探索》笔记——(3)View 的事件体系
- 开发艺术探索--Android的View事件体系
- Android艺术开发探索第三章————View的事件体系(下)
- Android开发艺术探索学习-View的基本知识
- 【读书笔记】【Android 开发艺术探索】第3章 View 的事件体系
- Android 开发艺术探索读书笔记 第三章 View的事件体系
- android 艺术开发探索之View的事件体系
- [读书笔记之安卓开发艺术探索]View的事件体系前的知识准备
- Android艺术开发探索第三章——View的事件体系(上)
- Android开发艺术探索读书(三)-View的事件体系
- Android开发艺术探索——学习笔记_View事件体系
- Android艺术开发探索第三章——View的事件体系(上)
- Android 开发艺术与探究 第三章 View的事件体系之View的基础知识
- Android艺术开发探索第三章————View的事件体系(下)
- 读书笔记-Android开发艺术探索-第3章-View的事件体系
- 第三章View的事件体系(Android开发艺术探索)
- Android开发艺术探索——第三章View事件体系读书笔记
- Android开发艺术探索(三)——View的事件体系
- Android开发艺术探索 读书笔记 第三章 View事件体系