什么是View
- 定義:View是界面層的控件的一種抽象掰读,既可以是單個(gè)控件,也可以是多個(gè)控件組成的一組控件
View的位置參數(shù)
定義:View的位置參數(shù)主要由它的四個(gè)頂點(diǎn)決定废恋,分別對(duì)應(yīng)View的四個(gè)屬性:top,left,right,bottom.其中top是左上角的縱坐標(biāo)陈醒,left是左上角的橫坐標(biāo),right是右下角的橫坐標(biāo)雇庙,bottom是右下角的縱坐標(biāo)谓形。
-
注意點(diǎn)
- 這些坐標(biāo)都是相對(duì)于View的父容器來說的灶伊,因此它是一個(gè)相對(duì)坐標(biāo)
- width=right-left
- height=bottom-top
-
坐標(biāo)的獲取方式
- left=getLeft();
- Right=getRight();
- Top=getTop();
- Bottom=getBottom();
額外的參數(shù)
x, y ,translationX和translationY,其中x和y是View左上角的坐標(biāo),而translationX和translationY是View早上叫相對(duì)于父容器的偏移量寒跳。并且translationX和translationY的默認(rèn)值為0聘萨,View也為他們提供了get/set方法
注意:
- 這幾個(gè)參數(shù)也是相對(duì)于父容器的坐標(biāo),view在平移過程中童太,top和left表示的是原始左上角的位置信息米辐,其值不會(huì)發(fā)生改變,此時(shí)發(fā)生改變的是x,y,translationX和translationY這四個(gè)參數(shù)
- 換算關(guān)系:
- x=left+translationX
- y=top+translationY
View的觸摸事件
MotionEvent
手指接觸屏幕后所產(chǎn)生的一系列事件
- ACTION_DOWN--手指剛接觸屏幕
- ACTION_MOVE--手指在屏幕上滑動(dòng)
- ACTION--UP--手指在屏幕上松開的一瞬間
注意:通過MotionEvent對(duì)象我們可以得到點(diǎn)擊事件發(fā)生的x和y坐標(biāo)书释。為此翘贮,系統(tǒng)提供了兩組方法:getX/getY和getRawX和getRawY
它們的區(qū)別:
- getX/getY返回的是相對(duì)于當(dāng)前View左上角的x和y坐標(biāo),而getRawX/getRawY返回的是相對(duì)于手機(jī)屏幕左上角的x和y坐標(biāo)
TouchSlop
- 定義:系統(tǒng)能夠識(shí)別的被認(rèn)為是滑動(dòng)的最小距離爆惧,它是一個(gè)常量择膝,合設(shè)備有關(guān)
獲取方式: ViewConfiguration.get(this).getScaledTouchSlop(); - 意義:當(dāng)我們處理滑動(dòng)的時(shí)候,可以利用這個(gè)常量來做一些過濾检激,比如當(dāng)兩次滑動(dòng)時(shí)間的滑動(dòng)距離小于這個(gè)值肴捉,我們認(rèn)為未達(dá)到滑動(dòng)距離的臨界值,因此就可以認(rèn)為他們不是滑動(dòng)的叔收。
VelocityTracker(速度追蹤)
- 用于追蹤手指在滑動(dòng)過程中的速度齿穗,包括水平跟豎直方向上的速度。
@Override
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction()==MotionEvent.ACTION_MOVE){
VelocityTracker velocityTracker=VelocityTracker.obtain();
velocityTracker.addMovement(event);
velocityTracker.computeCurrentVelocity(1000);//時(shí)間間隔
int xVelocity= (int) velocityTracker.getXVelocity();
int yVelocity= (int) velocityTracker.getYVelocity();
Log.i("MainAcitvity","xVelocity=="+xVelocity+"---yVelocity=="+yVelocity);
}
return super.onTouchEvent(event);
}
- 注意: 這里的速度是指一段時(shí)間內(nèi)手指所化過度像素?cái)?shù)饺律,這里的速度可以為負(fù)數(shù)
- 計(jì)算公式: 速度=(終點(diǎn)位置-起點(diǎn)位置)/時(shí)間段
- 最后在不使用的時(shí)候
velocityTracker.clear();
velocityTracker.recycle();
GestureDetector
定義:手勢檢測窃页,用于輔助檢測用戶的單擊,滑動(dòng)复濒,長按脖卖,雙擊等行為
Scroller
- 定義:彈性滑動(dòng)對(duì)象,用于實(shí)現(xiàn)View的彈性滑動(dòng)巧颈。