Android读书笔记-------View的事件体系 一

(内容源自于Android开发艺术探索)
View是andorid中控件的基类,ViewGroup也同样继承自View。这也就说明View可以是单个控件,也可以是一组控件。
View的位置参数:
View的位置可以通过两个点的坐标控制住:左上顶点,右下顶点。
位置名词:top 左上点纵坐标
left:左上点横坐标
right:右下角横坐标
bottom:右下角纵坐标
详细见书中图
width: right-left。
height:bottom-top。
可以通过getRight/top/…等方法获得

从Android3.0开始,加入了translation的感念,即相对于父容器的偏移量以及X,Y坐标的概念,X,Y代表左上顶点的横纵坐标。当View在发生平移时,getX,getY,setX,setY
get/setTranslationX/Y来获得当前左上点的坐标。

X=left+translationX Y同理。
注意:在View发生改变的过程中,top,left等值代表原始位置,是不会改变的。改变的只有X,Y,translationX/Y。

二、移动事件和最小距离
MotionEvent 是指在手指接触屏幕的一瞬间所产生的操作。通过该对象可以得到X,Y坐标。系统提供了getX/Y,getRawX /Y。 前者返回的是相对于当前View左上角的X,Y坐标,后者返回的是相对于屏幕左上角的X,Y坐标

TouchSlop
系统所能识别的最小滑动距离,当手指滑动的距离小于这个距离时,系统不认为进行了滑动操作,通过:

ViewConfiguration.get(getContext()).getScaledTouchSlop().

一个临界值,可以通过该值来过滤掉一些用户的意外操作。
在frameworks/base/core/res/res/values/config.xml中设置

三、速度追踪,手势检测,滑动方法
VelocityTracker
用于得到用户在滑动过程中的速度,包括水平滑动,竖直滑动。
使用方法,在View的onTouchEvent方法中追踪当前事件的速度

VelocityTracker velocityTracker=VelocityTrac.obtain()
velocityTracker.addMovement(event)
velocityTracker.computeCurrentVelocity(1000);
int xV=(int)velocityTracker.getXVelocity()
.........
注意:在获取速度前要先用computeCurrentVelocity方法计算速度
     要传入一个时间,单位为毫秒。
当不需要使用时
需要
velocityTracker.clear();
velocityTracker.recycle();回收该对象

GestureDetector
用于辅助检测用户的单机,滑动,长按,双击等行为。
用法:创建该对象,并且实现OnGestureDetector接口
GestureDetector mGes=new GestureDetector();
//解决长按屏幕后无法实现拖拽的现象
mGes.setIsLongpressEnable(false);
实现接口。。。。见书中

Scroller
弹性滑动对象。使用View自带的ScrollTo和ScrollBy方法进行滑动时,是瞬间完成的,用户体验十分不友好,采用将一次滑动在一定时间段内分成几份的思想。通过不断重绘View的位置,实现逐渐滑动的感觉

Scroller scroller=new Scroller();
//缓慢滑动到起始位置
private void smoothScrollTo(int destX,int destY){
int scrollX=getScrollX();
int delta=destX-scrollX;
//1000毫秒内向指定位置destX滑动
scroller.startScroll(scrollX,0,desta,0,1000);
}
pulic void computeScroll(){
if(scroller.computeScrollOffst()){
   scrollTo(scroller.getCurrX(),scroller.getCurrY());
   postInvalidate();//重绘View
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值