源碼分析 view體系(二) 滑動事件

前言

 view的滑動是Android自定義控件的基礎(chǔ)內(nèi)容,我們在開發(fā)過程中難免會遇到view的滑動問題废膘,
實現(xiàn)view的滑動有很多種方式雄家,給大家講幾個基本的滑動方法

view的滑動

1.layout()

view中會調(diào)用onLayout()方法來擺放位置,我們也可以直接用onLayout的left布隔、top、right稼虎、bottom這四種屬性來控制View的位置衅檀。比如我們自定義一個View,在onTouchEvent()方法中獲取觸摸點的坐標霎俩,放入onlayout()中术吝,這樣就可以實現(xiàn)隨著觸摸的位置變化而滑動,如圖:

...
 public boolean onTouchEvent(MotionEvent event) {
    //獲取到手指處的橫坐標和縱坐標
    int x = (int) event.getX();
    int y = (int) event.getY();

  switch (event.getAction()) {
   case MotionEvent.ACTION_DOWN: 
      lastX = x; 
      lastY = y; 
       break;
  case MotionEvent.ACTION_MOVE:
            //計算移動的距離
            int offsetX = x - lastX;
            int offsetY = y - lastY;
            //調(diào)用layout方法來重新放置它的位置
            layout(getLeft()+offsetX, getTop()+offsetY,
                    getRight()+offsetX , getBottom()+offsetY);
            break;
    ...
}
...

2.也可以通過offsetLeftAndRight()和offsetTopAndBottom()方法

這個和onlayout大致相同茸苇,只不過這個方法傳入的是偏移量排苍,我就直接放代碼啦

               case MotionEvent.ACTION_MOVE:
            //計算移動的距離
            int offsetX = x - lastX;
            int offsetY = y - lastY;
            //對left和right進行偏移
            offsetLeftAndRight(offsetX);
            //對top和bottom進行偏移
            offsetTopAndBottom(offsetY);
            break;

3.LayoutParams(通過改變參數(shù)達到滑動的目的)

LayoutParams中保存了view的布局參數(shù),我們通過不短的改變view參數(shù)学密,從而達到滑動的目的淘衙,
比如我們想實現(xiàn)viewpage 兩個條目切換的時候下面有有一個滑動的滑條那么就可以用這種方式


Paste_Image.png
    indicatorLine.post(new Runnable() {
        @Override
        public void run() {
            indicatorLine.measure(0, 0);
            int indicatorLineWidth = indicatorLine.getMeasuredWidth();
            originalIndicatorLineLeftMargin = rightTitleMarginLeft +
            (float) leftTitleWidth / 2 - (float) DimenUtil.dip2px(IntentionMajorActivity.this, 65) / 2 - textDistence;
            indicatorLineLayoutParams.leftMargin = (int) originalIndicatorLineLeftMargin;
            indicatorLine.setLayoutParams(indicatorLineLayoutParams);
        }
    });
}

4.scollTo與scollBy

scollTo(x,y)表示移動到某個具體的坐標點,而scollBy(dx,dy)則表示移動的增量為dx腻暮、dy彤守。其實scollBy最終也是要調(diào)用scollTo的毯侦。scollTo、scollBy移動的是View的內(nèi)容具垫,如果在ViewGroup中使用則是移動他所有的子View侈离。我們將ACTION_MOVE中的代碼替換成如下代碼:

   ((View)getParent()).scrollBy(-offsetX,-offsetY);

如果我們要讓view隨著手指的觸摸方向移動我們就要把偏移量設(shè)為負值

后言

還有一種滑動方式那就是通過動畫的方式進行滑動,那么不在今天講述的范圍筝蚕,
由于本人水平有限卦碾,某些地方可能存在誤解或不準確,如果你對此有疑問可以gitHub上提交issues進行反饋,如果喜歡的話可以star一下起宽。╭(╯ε╰)╮

參考自:
http://blog.csdn.net/itachi85/article/details/50724558
http://blog.csdn.net/yhqbsand/article/details/22804869
http://blog.csdn.net/zhchzh1000/article/details/22193053
http://www.linuxidc.com/Linux/2015-11/125390.htm

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末洲胖,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子坯沪,更是在濱河造成了極大的恐慌绿映,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,430評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件腐晾,死亡現(xiàn)場離奇詭異叉弦,居然都是意外死亡,警方通過查閱死者的電腦和手機藻糖,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,406評論 3 398
  • 文/潘曉璐 我一進店門淹冰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人颖御,你說我怎么就攤上這事榄棵∧模” “怎么了潘拱?”我有些...
    開封第一講書人閱讀 167,834評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長拧略。 經(jīng)常有香客問我芦岂,道長,這世上最難降的妖魔是什么垫蛆? 我笑而不...
    開封第一講書人閱讀 59,543評論 1 296
  • 正文 為了忘掉前任禽最,我火速辦了婚禮,結(jié)果婚禮上袱饭,老公的妹妹穿的比我還像新娘川无。我一直安慰自己,他們只是感情好虑乖,可當(dāng)我...
    茶點故事閱讀 68,547評論 6 397
  • 文/花漫 我一把揭開白布懦趋。 她就那樣靜靜地躺著,像睡著了一般疹味。 火紅的嫁衣襯著肌膚如雪仅叫。 梳的紋絲不亂的頭發(fā)上帜篇,一...
    開封第一講書人閱讀 52,196評論 1 308
  • 那天,我揣著相機與錄音诫咱,去河邊找鬼笙隙。 笑死,一個胖子當(dāng)著我的面吹牛坎缭,可吹牛的內(nèi)容都是我干的竟痰。 我是一名探鬼主播,決...
    沈念sama閱讀 40,776評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼幻锁,長吁一口氣:“原來是場噩夢啊……” “哼凯亮!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起哄尔,我...
    開封第一講書人閱讀 39,671評論 0 276
  • 序言:老撾萬榮一對情侶失蹤假消,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后岭接,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體富拗,經(jīng)...
    沈念sama閱讀 46,221評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,303評論 3 340
  • 正文 我和宋清朗相戀三年鸣戴,在試婚紗的時候發(fā)現(xiàn)自己被綠了啃沪。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,444評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡窄锅,死狀恐怖创千,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情入偷,我是刑警寧澤追驴,帶...
    沈念sama閱讀 36,134評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站疏之,受9級特大地震影響殿雪,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜锋爪,卻給世界環(huán)境...
    茶點故事閱讀 41,810評論 3 333
  • 文/蒙蒙 一丙曙、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧其骄,春花似錦亏镰、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,285評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春纸兔,著一層夾襖步出監(jiān)牢的瞬間惰瓜,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,399評論 1 272
  • 我被黑心中介騙來泰國打工汉矿, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留崎坊,地道東北人。 一個月前我還...
    沈念sama閱讀 48,837評論 3 376
  • 正文 我出身青樓洲拇,卻偏偏與公主長得像奈揍,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子赋续,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,455評論 2 359

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