android view事件体系基础
来源:互联网 发布:淘宝上买衣服的窍门 编辑:程序博客网 时间:2024/05/16 07:14
一、view基础
1、view 的基础参数
3.0之前 view 四个基础参数 left top right bottom
获取方法 getLeft(); getTop(), getRight();getBottom();
view 的left right top bottom 都是相对父容器来说的。
3.0 之后又增加了4个参数 x ,y ,translationX ,translationY
获取方法 getX() getY(); getTranslationX(); getTranslationY();
这里getX() getY() getTansLations(); getTransLationY(); 也是相对父容器来说的。
x = left+gettranslationX();
y = right+getTranslationY();
这里的注意tranlationX() translationY() 指的是通过动画可以改变的平移量。(3.0 之出现了属性动画,也有了getTranslation()方法)
2、MotionEvent
一个事件序列包括(down move...... up)三种事件 ,三种事件合起来成为一个事件序列。
通过event getX() getY() getRawX() getRawY() 方法可以获取到 点击的 坐标 区别就是个体getX() 是相对父容器而言,getRaw() 是相对于屏幕而言的。
3、TouchSlop(滑动的最小距离,通过看源码发现是8dp的长度)
通过ViewConfiguration.get(getContext()).getScaledTouchSlop() 方法可以获取到值。
4、VelocityTracker(速度追踪器)
可以获取滑动的速度
VelocityTracker tracker =VelocityTracker.obtaion();
tracker.addMovMent(event);
tracker.completeCurrentVelocity(1000);
tracker.getXVelocity() 获取到x 速度
注意获取之前一定要先计算速度。
不是用它的时候
trancker.clear();
trancker.recycle();
5、GestureDetector(手势识别器)
手势检测用来辅助检测单机 长按 双击 滑动等事件
使用
GestureDetectorgestureDetector= new GestureDetector(this);;
gestureDetector.setIsLongpressEnable(false) // 解决长按无法拖动的现象
boolean consum =gestureDetector.onTouchEvent(event) (返回值代表是消费掉了event事件)
这里长用到的监听有
onsingleTapUp() 单机, onFiling() 惯性滑动 onScroll() 滑动 onLongPress() 长按onDoubleTap() 双击
这些监听可以在view onTounchEvent 方法中实现 ,建议是滑动相关的在onTuchEvent()中实现,点击相关的用GestDetector 去实现。
6、
Scroller
是view 实现滑动一个非常方便的的工具,但是本身不能使view发生滑动它需要配合view的computeScroll 方法 来实现view 的滑动。
Scroller scroller = new Scroller(this);
private void smoothScrollTo(int destX ,int destY ){
int scrollx = getScrollX();
int delta = destx - scrollx;
mScroller.startScroll(scrollX , 0 ,delta,0,1000) // 在1000 毫秒内滑向delta,效果就是缓慢滑动
invalidate();
}
public void computeScroll(){
if(mScroller.computeScroll()){
scrollTo(mScroller.getCurrX(),mScroller.getCurrY());
postInvalidate();
}
}
invalidate()会引起view 重绘,view重绘conputeScroll()会调用, postinvalidate() 又会引起view 重绘。知道滑动结束为止。
二、view 的滑动
(android 所有的滑动效果分类不过三类实现方法:1、 view 的scrollTo scrollby 方法 注意这里滑动的是view 的内容 2、通过给view 添加平移效果 比如属性动画,3.0之前动画只是对view的影响进行操作,3.0以后属性动画才真正改变view 的属性 3、通过改变view layoutparams 来改变来实现view的滑动效果)
1、scrollTo()/scrollby()方法。(其实内部ScrollBy,是调用了ScrollTo()方法)
view 的两个内部属性ScrollX,ScrollY,这两个属性可以通过getScrollX(),getScrollY()方法获得 scrollX 值等于view 内容左边沿与view 左边沿的距离,注意这里的上边是指的view内容。同类scrollY 指的是view内容上边沿跟view 上边沿的距离。
这里当view 内容左边沿在 view 左边沿 左边时候view 正,此种情况相当于view 内容左移,运动是相对的view 相当于右移,scrollX 是view 属性 说是scroll 为正值
2、 使用动画 :这里主要是说view 的属性动画,3.0之前的平移动画只是改变了view 的影像。所以 view 的位置没有真正改变。在使用动画改变view 值时候 如果添加点击事件的话一定注意 view 的位置没有改变。
3、改变布局参数
v就是通过set不懂布局参数实现 滑动,这里非常灵活,以后会给出一些例子,在开发过程中,根据具体情况可以自己体会。
比较三种移动发现:
view 的scrollTo(),跟ScrollBy 方法 移动的是view内容的位置,view本身不会改变。所以适合view 内容的滑动
动画 使用简单 可以实现一些复杂效果,由于3.0之前动画限制(只能改变影像不能真正移动动画)所以跟用户交互可能有问题,要对3.0之前情况处理。
通过布局参数的话,根据实际情况,操作可能有些复杂,单不会影响用户的交互,
三、view的弹性滑动
view 的弹性滑动实现方式很多,比如 前面提到Scroller,Postdelayed ThreadSleep 等等。
下面分别实现
Scroller 实现滑动
Scroller 并不能实现滑动需要配合view的computerScroll () 方法来实现滑动。其实scroller 就是将滑动的距离,根据你设置的时间,以及插值器来,将值做一个滑动策略的变化。 类型于动画中的值动画/
通过动画 以及参数 比较简单 这里就不做介绍了。
而通过延时策略,就是通过hander post延迟消息,以及通过thread sleep 方法来实现动画的效果。(其本质跟Scroll 类似,就是将滑动距离,按时间的流失,逐步的放出来,通过 scrollTo(),或者scrollBy() 方法实现滑动)
- android view事件体系基础
- 【android】View的事件体系1-基础
- android View的事件体系
- Android View 事件体系1
- Android View的事件体系
- Android View 的事件体系
- Android-View的事件体系
- Android View的事件体系
- View事件体系(一)基础概念
- Android之View基础总结(View的事件体系一)
- Android读书笔记-------View的事件体系 一
- android学习 view的事件体系
- Android:View体系①----事件传递
- Android之View的事件体系
- android知识回顾--view的事件体系
- Android-View事件体系之View的基础知识
- View的事件体系
- View 的事件体系
- 【C】C语言中读取整形和浮点型的格式说明符
- Android 自定义控件边框,圆角幅度
- 谈谈格局这个概念
- [leetcode]34. Search for a Range
- 要么读书,要么健身,要么恋爱(九)从0到1:开启商业与未来
- android view事件体系基础
- jQuery基础(下)
- TIJ读书笔记05-this关键字
- 指令到底是什么?机器码又是什么?
- Java异常
- 树莓派3的wifi使用
- Adapter与ListView的合作
- iOS编译FFmpeg、kxmovie实现视频播放
- core dump