正是ViewGroup内部含有众多少个控件,View的根底需求调节

View的底子需求调节:

1.View的差非常的少介绍

  1. View的职位参数
  2. MotionEvent对象和TouchSlop对象
  3. VelocityTracker对象
  4. GestureDetector对象
  5. Scroller对象
  6. …………..

View是Android中享有控件的基类,不管是Textview依旧Button、RelativeLayout、ListView,它们的同台基类都是View。可能说,View是大器晚成种分界面层的控件的一种浮泛,除了View,还应该有ViewGroup,从名字上看,他能够被翻译成为控件组,正是ViewGroup内部含有众七个控件,即黄金年代组View。ViewGroup也三番八遍自View,所以View自身也足以是单个控件或然说多少个控件组成。

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()

2.View的岗位参数

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指的是1000皮秒,得到的是1000飞秒内滑过的像素数。速度可正可负:

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

末尾,当无需运用的时候,须求调用clear()方法重新设置并回笼内部存款和储蓄器:

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

View的职责主要由它的多个顶峰来定义,分别对应与View的多少个属性:top、left、right、bottom,此中top是左上角纵坐标,left是左上角横坐标,right是右下角横坐标,bottom是右下角纵坐标,那个坐标都是相对于View的父容器来讲的,它是豆蔻梢头种相持坐标。View的那多少个坐标大家能够透过View源码中的mLeft、mRight、mTop、mBootom,这几分子变量来赢得,即Left=getLeft(
);由此大家能够通过right-left得到View的width,通过bottom-top获得View的height;

4. GestureDetector对象

皇冠现金app,手势检查评定,用于扶助检验客商的单击、滑动、长按、双击等作为。 使用格局

1.开立一个GestureDetector对象并贯彻OnGestureListener接口,根据须求,也可完成OnDoubleTapListener接口进而监听双击行为:

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

2.在对象View的OnTouch伊夫nt方法中加上以下降成,便可接管目的View的onTouchEvent
方法:

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

兑现OnGestureListener和OnDoubleTapListener接口中的方法,此中常用的方法有:onSingleTapUp(单击)、onFling(快捷度滑冰动)、onScroll(拖动)、onLongPress(长按)和onDoubleTap(双击卡塔 尔(英语:State of Qatar)。
提议:尽管只是监听滑动相关的,能够协和在onTouchEvent中落到实处,如若要监听双击这种作为,那么就利用GestureDetector。

从Android3.0从头,View扩张了额外的多少个参数:x、y、translationX、translationY,此中x和y是View的左上角的坐标,translationX和translationY是View左上角周旋于父容器的偏移量。那多少个也是相对于父容器的坐标,并且translationX和translationY的私下认可值都以0,和View的七个着力的无人问津参数相仿,View也为她们提供了get/set方法,那多少个参数的折算方法是x=left+translationX、y=top+translationY。

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();
}
}

View在活动进度中,top和left表示的是固有左上角的岗位信息,其值并不会生出转移,当时放生改正的独有x、y、translationX、translationY那八个参数,getTranslationX(
)是View相对于父容器的偏移量,早先值为0.

3、MotionEvent和TouchSlop

MotionEvent指的是手在触摸荧屏后发出的生龙活虎雨后玉兰片事件,在这之中规范的是ACTION_DOWN——手指刚触摸荧屏,ACTION_MOVE——手指在显示屏上活动、ACTION_UP——手指从显示屏上放手。

上述那三种处境规范的事件种类,相同的时候经过Motion伊芙nt对象我们得以博得点击事件的x和y坐标,为此,系统提供了两组方法:getX/getY和getRawX/getRawY,他们的意义其实很简短getX和getY重临的是相对于最近View左上角的x和y坐标的值,而getRawX和getRawY重回的是周旋于手提式有线话机显示屏的左上角的x和y的坐标。

TouchSlop是系统所能识别的被以为是滑动的微小间距,这是贰个常量,和配备有关,在分裂的器材上那么些值恐怕是例外的,通过如下格局就可以得到那么些常量:ViewConfiguration.get(getContext(卡塔 尔(英语:State of Qatar)).getScaledTouchSlop().大家得以行使那一个常量来做一些过滤,比如当两回滑动事件的滑行间隔小于这些值,大家就能够以为尚未高达滑动间距的围拢值,因而得以感到他俩是不被滑动的。

4、VelocityTracker、GestureDetector、Scroller

VelocityTracker看名称就能想到其意义即速度跟踪,在Android中举足轻重接收于Touchevent。VelocityTracker通过追踪三番四回串平地风波实时总结出当下的快慢,那样的用法在android系统空间中处处可以见到,举例Gestures中的Fling,
Scrolling等。

VelocityTracker首要用追踪触摸屏事件(flinging事件和任何gestures手势事件卡塔尔的速率。用addMovement(MotionEvent)函数将Motion
event参预到VelocityTracker类实例中.你能够采用getXVelocity()
或getXVelocity()获得横向和竖向的速率到速率时,然则选拔它们此前请先调用computeCurrentVelocity(int)来起首化速率的单位
。最终当不需求的时候须求把VelocityTracker的指标重新初始化并回笼,通过clear()、recycle().

GestureDetector手势检查实验,用于帮衬检查实验客户的单击、滑动、长按、双击等作为。要动用GestureDetector也并不复杂。首先必要创设叁个GestureDetector对象并贯彻OnGestureListener接口,依据须求我们还足以兑现OnDoubleTapListener进而能够监听双击的作为。
接着是接管View的onTouch伊芙nt方法,在监听的view的onTouchEvent方法中达成一下代码。

Scroller弹性滑动对象,用于落到实处View的弹滑动。当使用View的scrollTo/scrollBy方法开展滑动的时候,其进程都是刹那间达成的,这一个从未联网效果的滑行顾客体验效果并倒霉。那时候大家能够行使Scroller来完成成连接效果的滑行,其进程不是转眨眼间之间做到的。
  

相关文章