view的滑動(dòng)和彈性滑動(dòng)

了解view的滑動(dòng)必須要先了解以下幾個(gè)概念:
view的位置參數(shù):
(1)花嘶、left喧兄、top、right圾另、bottom分別表示view相對于父控件的左上頂點(diǎn)的坐標(biāo)和右下頂點(diǎn)的坐標(biāo)偎血;分別通過getLeft()诸衔、getTop()、getRight()颇玷、getBottom()獲得笨农。
(2)、x帖渠、y谒亦、translationX、translationY空郊。x份招、y表示view的左上頂點(diǎn)的坐標(biāo);translationX狞甚、translationY表示view的左上頂點(diǎn)相對于父控件的偏移量脾还。
(3)、getX()入愧、getY()獲取的是相對于父控件的坐標(biāo);getRawX()、getRawY()獲取的是相對于手機(jī)屏幕的坐標(biāo)棺蛛。

TouchSlop:常量怔蚌;和手機(jī)設(shè)備有關(guān);表示系統(tǒng)所能識別的最小的滑動(dòng)距離旁赊¤胗唬可以通過ViewConfiguration.get(getContext()).getScaledTouchSlop()獲取;

由于手機(jī)屏幕小,所以需要通過滑動(dòng)來對內(nèi)容進(jìn)行顯示和隱藏终畅。view的滑動(dòng)主要有三種方式:1籍胯、通過view的scrollTo/scrollBy方法實(shí)現(xiàn);2离福、通過動(dòng)畫給view進(jìn)行平移操作杖狼;3、改變view的Layoutparmes參數(shù)妖爷,是view進(jìn)行重新布局蝶涩,實(shí)現(xiàn)滑動(dòng)。

(1)絮识、scrollTo/scrollBy:mScrollX是view的左邊緣和內(nèi)容的左邊緣的距離绿聘;mScrollY是view的上邊緣和內(nèi)容的上邊緣的距離。當(dāng)view的左邊緣在內(nèi)容的左邊緣的右邊的時(shí)候次舌,mScrollX是正值熄攘;當(dāng)view的上邊緣在內(nèi)容的上邊緣的下邊時(shí),mScrollY為正值彼念;scrollTo和scrollBy方法不會(huì)改變view在布局中的位置挪圾,改變的是內(nèi)容的位置。scrollTo()方法讓View相對于初始的位置滾動(dòng)某段距離国拇,scrollBy()方法則是讓View相對于當(dāng)前的位置滾動(dòng)某段距離洛史。同時(shí)可以發(fā)現(xiàn)scrollBy()是通過scrollTo()方法實(shí)現(xiàn)的。

(2)酱吝、通過動(dòng)畫:系統(tǒng)動(dòng)畫并不能真正改變view的位置參數(shù)也殖,如果希望動(dòng)畫執(zhí)行完后狀態(tài)得以保留,那么必須將fillAfter屬性設(shè)為true务热;使用屬性動(dòng)畫就不會(huì)有這些問題忆嗜,但是屬性動(dòng)畫在android3.0無法使用,必須使用nineoldandroids兼容庫崎岂。注意使用兼容庫中的ViewHelper幫助類中的方法捆毫。

(3)、通過改變Layoutparmes:view.setLayoutParams();

彈性滑動(dòng):1冲甘、通過Scroller绩卤。2途样、通過動(dòng)畫。3濒憋、通過延時(shí)策略何暇。

首先看一下Scroller的典型用法:

D1WNPK3)3(7UU$IA@D7U1DF.png

mScroller.startScroll(scrollX, 0, deltaX, 0, 500);只是啟動(dòng)滑動(dòng),但是控件并不會(huì)滑動(dòng)凛驮,真正造成滑動(dòng)的是下面的invalidate()方法裆站,invalidate()的調(diào)用會(huì)使得view重繪,調(diào)用computeScroll()方法黔夭,在computeScroll()方法里面會(huì)判斷滑動(dòng)是否結(jié)束宏胯,computeScrollOffset返回值為true表示滑動(dòng)未結(jié)束,返回false表示滑動(dòng)結(jié)束本姥;滑動(dòng)未結(jié)束的時(shí)候調(diào)用scrollTo()進(jìn)行滑動(dòng)肩袍,并調(diào)用invalidate(),如此循環(huán)直到computeScrollOffset返回true為止。

延時(shí)策略:通過Handler發(fā)送并接收延時(shí)消息扣草,每次接收到消息便完成一次ScrollTo操作了牛,從而實(shí)現(xiàn)彈性滑動(dòng)的效果。但是需要注意的是辰妙,由于系統(tǒng)的消息調(diào)度需要時(shí)間鹰祸,完成這次彈性滑動(dòng)的時(shí)間總是大于if條件判斷為true的次數(shù)乘以20ms(延遲消息的發(fā)送時(shí)間間隔)。因此對彈性滑動(dòng)完成總時(shí)間有精確要求的使用場景下密浑,使用延時(shí)策略是一個(gè)不太合適的選擇蛙婴。
public void handleMessage(Message msg) {
switch(mag.what){
case SCROLL_FRACTION:{
//if判斷滑動(dòng)還沒有結(jié)束,結(jié)束則不再滑動(dòng)和發(fā)送消息
if(){
//通過滑動(dòng)完成比例計(jì)算該次滑動(dòng)片段的位置點(diǎn)scrollX,scrollY
View.scrollTo(scrollX,scrollY);
mHandler.sendEmptyMessageDelayed(SCROLL_FRACTION, 20);
}
break;
}
default:
break;
}
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末尔破,一起剝皮案震驚了整個(gè)濱河市街图,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌懒构,老刑警劉巖餐济,帶你破解...
    沈念sama閱讀 216,324評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異胆剧,居然都是意外死亡絮姆,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評論 3 392
  • 文/潘曉璐 我一進(jìn)店門秩霍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來篙悯,“玉大人,你說我怎么就攤上這事铃绒「胝眨” “怎么了?”我有些...
    開封第一講書人閱讀 162,328評論 0 353
  • 文/不壞的土叔 我叫張陵颠悬,是天一觀的道長矮燎。 經(jīng)常有香客問我定血,道長,這世上最難降的妖魔是什么漏峰? 我笑而不...
    開封第一講書人閱讀 58,147評論 1 292
  • 正文 為了忘掉前任糠悼,我火速辦了婚禮,結(jié)果婚禮上浅乔,老公的妹妹穿的比我還像新娘。我一直安慰自己铝条,他們只是感情好靖苇,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,160評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著班缰,像睡著了一般贤壁。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上埠忘,一...
    開封第一講書人閱讀 51,115評論 1 296
  • 那天脾拆,我揣著相機(jī)與錄音,去河邊找鬼莹妒。 笑死名船,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的旨怠。 我是一名探鬼主播渠驼,決...
    沈念sama閱讀 40,025評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼鉴腻!你這毒婦竟也來了迷扇?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,867評論 0 274
  • 序言:老撾萬榮一對情侶失蹤爽哎,失蹤者是張志新(化名)和其女友劉穎蜓席,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體课锌,經(jīng)...
    沈念sama閱讀 45,307評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡厨内,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,528評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了产镐。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片隘庄。...
    茶點(diǎn)故事閱讀 39,688評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖癣亚,靈堂內(nèi)的尸體忽然破棺而出丑掺,到底是詐尸還是另有隱情,我是刑警寧澤述雾,帶...
    沈念sama閱讀 35,409評論 5 343
  • 正文 年R本政府宣布街州,位于F島的核電站兼丰,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏唆缴。R本人自食惡果不足惜鳍征,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,001評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望面徽。 院中可真熱鬧艳丛,春花似錦、人聲如沸趟紊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,657評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽霎匈。三九已至戴差,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間铛嘱,已是汗流浹背暖释。 一陣腳步聲響...
    開封第一講書人閱讀 32,811評論 1 268
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留墨吓,地道東北人球匕。 一個(gè)月前我還...
    沈念sama閱讀 47,685評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像肛真,于是被迫代替她去往敵國和親谐丢。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,573評論 2 353

推薦閱讀更多精彩內(nèi)容