View滑動(dòng)是自定義ViewGroup中十分常見的一個(gè)功能。Android提供了多種View滑動(dòng)的方法。
layout方法
offsetLeftAndRight()與offsetTopAndBottom方法
LayoutParams方法
scrollTo 與scrollBy方法
利用Scroller類
屬性動(dòng)畫
ViewDragHelper
雖然Android提供了這個(gè)多方法,實(shí)際上他們的原理都是一樣的,當(dāng)觸摸到View時(shí),系統(tǒng)記下當(dāng)前觸摸點(diǎn)的坐標(biāo);當(dāng)手指移動(dòng)時(shí),系統(tǒng)記下移動(dòng)后的觸摸點(diǎn)坐標(biāo),從而獲取到相對(duì)于前一次坐標(biāo)點(diǎn)的偏移量,并通過(guò)偏移量來(lái)修改View的坐標(biāo)。這樣不斷的重復(fù),就實(shí)現(xiàn)了滑動(dòng)。
這篇文章,主要說(shuō)下利用Scroller類來(lái)實(shí)現(xiàn)滑動(dòng),Scroller類比起他之前的說(shuō)的那些方法,他有一個(gè)優(yōu)勢(shì)在于他的滑動(dòng)效果是平滑的。
View中的坐標(biāo)系
在Android中有兩種坐標(biāo)系,一種是Android坐標(biāo)系,一種是視圖坐標(biāo)系。根據(jù)物理學(xué)知識(shí),坐標(biāo)系的選取不同,物體的移動(dòng)會(huì)有不同的效果。
在Android坐標(biāo)系中,坐標(biāo)的原點(diǎn)是以屏幕的左上角為(0,0)。這個(gè)點(diǎn)向右為x軸正方向,這個(gè)點(diǎn)向下為y軸正方向。在滑動(dòng)處理的時(shí)候,我們常常需要獲得點(diǎn)的坐標(biāo),如果我們用getRawX()和getRawY()來(lái)獲得該點(diǎn)的坐標(biāo),則這個(gè)坐標(biāo)是相對(duì)于Android坐標(biāo)系的坐標(biāo)。
在視圖坐標(biāo)系中,坐標(biāo)的原點(diǎn)是父視圖的左上角為(0,0)。同樣,這個(gè)點(diǎn)向右為x軸正方向,這個(gè)點(diǎn)向下為y軸正方向。我們常常用getX()和getY()來(lái)獲得該點(diǎn)的坐標(biāo),則這個(gè)坐標(biāo)就是視圖坐標(biāo)系的坐標(biāo),也就是說(shuō)相對(duì)于父視圖的相對(duì)坐標(biāo)。
最后,我們總結(jié)一下這4個(gè)方法的具體含義,在后面的滑動(dòng)時(shí)會(huì)經(jīng)常遇到。
getX()
: 獲取點(diǎn)擊事件距離控件左邊的距離,即視圖坐標(biāo)