View事件体系明仕msyz手机版,View的基础知识

View的功底须要调节:

一、概念

View是Android中保有控件的基类,是一种分界面层的控件的一种浮泛,它意味着了一个控件。除了View,还会有ViewGroup,ViewGroup内部能够分包众多控件,即一组View。ViewGroup承袭View,那就象征View自身就足以是单个控件也能够是由多个控件组成的一组控件,通过这种关系就产生了View树的布局。

  1. View的任务参数
  2. MotionEvent对象和TouchSlop对象
  3. VelocityTracker对象
  4. GestureDetector对象
  5. Scroller对象
  6. ..............

二、View的地点参数

在Android中,x轴和y轴的正方向分别为右和下。
View的多少个天性:top、left、right、bottom。
top:左上角的纵坐标,通过getTop()获取。
left:左上角的横坐标,通过getLeft()获取。
right:右下角的横坐标,通过getRight()获取。
bottom:右下角的纵坐标,通过getBottom()获取。
留心:那一个坐标都以相持于View的父容器来讲的,是一种相对坐标。

width = right - left;
height = bottom - top;

从Android3.0最早,View扩充了附加多少个参数:x、y、translationX和translationY。
x:左上角横坐标,通过getX()获取。
y:左上角纵坐标,通过getY()获取。
translationX:左上角绝对于父容器横向的偏移量,通过getTranslationX()获取,暗许值为0。
translationY:左上角相对于父容器纵向的偏移量,通过getTranslationY()获取,默许值为0。

x = left + translationX;
y = top + translationY;

介意:View在移动的历程中,top和left表示的是土生土养左上角的任务新闻,其值并不会爆发改动,此时产生改造的是x、y、translationX和translationY那多个参数。

1.View的职位参数

一、Top, Left, Right, Bottom

View的地方主要由它的八个极端来支配,分别对应于View的多少个属性:top,left,right,bottom,当中top是左上角的纵坐标,left是左上角的横坐标,right是右下角的横坐标,bottom是右下角纵坐标。可是大家只顾,这么些坐标都以相对于View的父容器来讲的,由此它是一种争持坐标,View的坐标和父容器的涉及如下图(注:在Android中,X轴和Y轴的四方向分别为右和下)

因此得出View的宽高:

width = right - left
height = bottom - top
//这四个参数可以由以下方式获取
Left = getLeft();
Right = getRight();
Top = getTop();
Bottom = getBottom();

Android3.0后,View扩张了x、y、translationX和translationY那多少个参数。个中x和y是View左上角的坐标,而translationX和translationY是View左上角针锋相对于容器的偏移量
他们中间的折算关系如下:

x = left + translationX;
y = top + translationY;

只顾:View在活动的进度中,top和left表示的是原来左上角的地方新闻不会变动,退换的是x、y、translationX和translaY。

二、MotionEvent和TouchSlop

MotionEvent

在指尖接触到显示器后会发生的一名目好些个点击事件,如

ACTION_DOWN:手指刚接触到荧屏

ACTION_MOVE:手指在显示器上活动

ACTION_UP :手指从显示屏上放手的一念之差

透过Motion伊夫n对象大家得以拿走事件时有发生的x和y坐标,大家能够透过getX/getY和getRawX/getRawY获得,它们的界别是:getX/getY再次回到的是龃龉于当下View左上角的x和y坐标,getRawX/getRawY重临的是相持于手提式有线电话机荧屏左上角的x和y坐标。

TouchSlop

TouchSloup是系统所能识别出的被感觉是滑动的小不点儿距离,那是贰个常量,与设施有关,可由此以下方式赢得:

ViewConfiguration.get(getContext()).getScaledTouchSloup()

三、MotionEvent和TouchSlop

1.MotionEvent
规范的事件类型:ACTION_DOWN、ACTION_MOVE、ACTION_UP。
getX():获取相对于近些日子View左上角的x坐标。
getY():获取相对于当下View左上角的y坐标。
getRawX():获取相对于手提式有线电话机荧屏左上角的x坐标。
getRawY():获取相对于手提式有线电话机显示屏左上角的y坐标。
2.TouchSlop
TouchSlop是系统所能识别出的被以为是滑动的蝇头距离。
收获方式:

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

3. VelocityTracker对象

进度跟踪,用于跟踪手指在滑行进度中的速度,包蕴水平方向速度和竖直方向速度。 使用办法:

1.在View的onTouch伊夫nt方法中追踪当前单击事件的快慢

VelocityRracker velocityTracker = VelocityTracker.obtain();
velocityTracker.addMovement(event);

2.计量速度,得到水平速度和竖直速度

velocityTracker.computeCurrentVelocity(1000);
int xVelocity = (int)velocityTracker.getXVelocity();
int yVelocity = (int)velocityTracker.getYVelocity();

留意,获取速度从前必须先总结速度,即调用computeCurrentVelocity方法,这里指的快慢是指一段时间内手指滑过的像素数,一千指的是一千微秒,得到的是1000纳秒内滑过的像素数。速度可正可负:

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

终极,当不需求运用的时候,须求调用clear()方法重新载入参数并回收内部存储器:

velocityTracker.clear();
velocityTracker.recycle();

四、VelocityTracker、GestureDetector和Scroller

1.VelocityTracker
进度追踪,用于追踪手指在滑行进度中的速度,饱含水平和竖直方向的速度。
应用格局:
首先,在View的onTouch伊芙nt方法中追踪当前单击事件的进程:

VelocityTracker velocityTracker = VelocityTracker.obtain();
velocityTracker.addMovement(event);

然后,获取当前的快慢:

VelocityTracker.computeCurrentVelocity(1000); //计算速度
int xVelocity = (int) velocityTracker.getXVelocity(); //获取速度
int yVelocity = (int) velocityTracker.getYVelocity(); //获取速度

注意:
1.取得速度在此之前必需先总计速度;
2.那边的速度是指一段时间内手指所滑过的像素数;
速度 = (终点地方 - 源点地点) / 时间段;
速度,可感到负值;
岁月段,为computeCurrentVelocity方法传递的参数值,单位为微秒(ms);
最后,当没有供给运用的时候,重新恢复设置并回收内部存款和储蓄器:

velocityTracker.clear();
velocityTracker.recycle();

2.GestureDetector
手势检查实验,用于支援检查评定客户的单击、滑动、长按、双击等作为。
行使方法:
首先,须要创立二个GestureDetector对象并落成OnGestureListener接口,依据要求还足以兑现OnDoubleTapListener从而能够监听双击行为:

GestureDetector mGestureDetector = new GestureDetector(this);
//解决长按屏幕后无法拖动的现象
mGestureDetector.setIsLongpressEnabled(false);

接着,接管指标View的onTouchEvent方法,在待监听View的onTouch伊芙nt方法中增添如下跌成:

boolean consume = mGestureDetector.onTouchEvent(event);
return consume;

然后,就能够有选取地达成OnGestureListener和OnDoubleTapListener中的方法了。在平凡开支中,相比较常用的有:onSingleTapUp(单击)、onFling(快捷滑动)、onScroll(拖动)、onLongPress(长按)和onDoubleTap(双击)。

在事实上支付中,能够不使用GestureDetector,完全能够在View的onTouchEvent方法中贯彻所需的监听,这一个就看个人的喜好了。
提出:借使只是监听滑动相关的,提议协和在onTouchEvent方法中贯彻,假设急需监听双击这种作为来讲,那么就利用GestureDetector。
3.Scroller
弹性滑动对象,用于落实View的弹性滑动。
当使用View的scrollTo / scrollBy方法开展滑动时,其经过是一下子实现的,那个未有接通效果的滑动客商体验不佳,能够选用Scroller来达成有连接效果的滑动。
动用方法及办事原理将要"滑动"小节介绍。

4. GestureDetector对象

手势检测,用于扶持检查评定顾客的单击、滑动、长按、双击等表现。 使用方法

1.创制多少个GestureDetector对象并达成OnGestureListener接口,遵照必要,也可达成OnDoubleTapListener接口进而监听双击行为:

GestureDetector mGestureDetector = new GestureDetector(this);
//解决长按屏幕后无法拖动的现象
mGestureDetector.setIsLongpressEnabled(false);

2.在对象View的OnTouchEvent方法中充裕以下降成,便可接管目的View的onTouch伊夫nt 方法:

boolean consume = mGestureDetector.onTouchEvent(event);
return consume;

兑现OnGestureListener和OnDoubleTapListener接口中的方法,在这之中常用的不二等秘书籍有:onSingleTapUp(单击)、onFling(火速滑动)、onScroll(拖动)、onLongPress(长按)和onDoubleTap(双击)。 提出:假诺只是监听滑动相关的,能够团结在onTouchEvent中落到实处,若是要监听双击这种行为,那么就选择GestureDetector。

5. Scroller对象

弹性滑动对象,用于落到实处View的弹性滑动,能够兑现成过度的滑动。其自己无法让View自行滑动,须求和View的computeScroll方法合作使用技能做到这一个功能。 使用方法:

Scroller scroller = 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);
invalidata();
}
@Override
public void computeScroll(){
if(mScroller.computeScrollOffset()){
 scrollTo(mScroller.getCurrX,mScroller.getCurrY());
 postInvalidate();
}
}

本文由明仕msyz手机版发布于家居装修-蜗牛装饰,转载请注明出处:View事件体系明仕msyz手机版,View的基础知识

TAG标签:
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。