自定義控制項之滑動

2021-08-01 07:24:40 字數 2945 閱讀 9975

view滑動的方法是現實絢麗的自定義控制項的基礎

一般來說實現滑動的方法有三種:

通過view本身提供的scrollto/scrollby方法來實現

通過動畫方法

通過更改view的layoutparams,實現重新布局來實現。

一、通過view本身提供的scrollto/scrollby方法來實現

scrollto/scrollby改變的是控制項的內容的而不是控制項在布局中的位置。例如設定乙個長寬高都是100dp的textview,效果如下:

scrollto使用方法是:

/**

* x:是在x軸上的偏移量

* y:是在y軸上的偏移量

* 例如從(0,0)偏移到(20,20),那麼x=0-20=-20, y=0-20=-20

* 所以,如果從上向下,從左向右,那麼偏移量x,y為負值,反之為正值。

*/tv.scrollto(int x,int y);

scrollby可以多次偏移,再次偏移的時候就以上次偏移的位置作為起始點。具體效果如上圖。

tv.scrollby(int x,int y);
二、通過動畫方式動畫的部分下次會詳細描述,這次略過。

三、通過更改view的layoutparams,實現重新布局來實現。

製作乙個翻頁的介面,在翻頁的時候小圓點跟著變化,效果如下:

檢視主要**:

xml布局:

重要**片段:

/**

* 載入小圓點

*/for(int i=0;ivelocitytracker介紹:

velocitytracker是速度***,用於跟蹤手指在滑動過程中的速度,包括豎直速度和水平速度。

//獲取速度***的物件

velocitytracker = velocitytracker.obtain();

@override

public boolean ontouchevent(motionevent event)

return super.ontouchevent(event);

}/**

* 當不使用的時候,重置以及釋放記憶體

*/velocitytracker.clear();

velocitytracker.recycle();

因為: 速度 = (終點位置 - 起點位置) / 時間段 , 所以速度有正負值,向下/向右滑動,水平/豎直的速度為正值,反之為負值。

gesturedector詳解:

手勢檢測器,雖然android中有ontouch()方法,但是這個方法太簡單了,如果需要處理一些複雜的手勢,那麼就需要用到gesturedector。

gesturedector這個類提供了兩個介面和乙個類。

ongesturelistener介面

ondoubletaplistener介面

******ongesturelistener,此類繼承了上面兩個介面的所有方法,需要哪個方法就實現哪個方法。

gesturedetector mgesturedetector = new gesturedetector(mgesturelistener);

private gesturedetector.ongesturelistener mgesturelistener = new gesturedetector.ongesturelistener()

@override

public boolean ontouch(view v, motionevent event)

彈性滑動:

上面介紹的滑動方法都是生硬的滑動,這次介紹彈性滑動,彈性滑動差不多有三種方法:

使用scroller

通過動畫

通過延時策略

一、使用scroller

scroller需要與computescroll配合使用:

scroller mscroller = new scroller(context);

public void smoothscrollto(int destx,int desty,int durationtime)

@override

public void computescroll()

}

當呼叫smoothscrollto方法的時候,invalidate()方法會導致view重繪。當view重繪後會在draw方法中呼叫computescroll,而computescroll又會去從scroller中獲取當前的scrollx和scrolly;然後又通過scrollto實現滑動。接著又呼叫postinvalidate方法來進行繪製,這次繪製又會導致computescroll方法的呼叫(注意此時獲取的當前的scrollx和scrolly是上次滑動後的位置),如此反覆,直至整個滑動過程結束。

二、通過動畫方式

動畫的部分下次會詳細描述,這次略過。

三、通過延時策略方式

private static final int message_tag = 1;

private int mcount = 0;

private int total_count = 30;

private int delay_time = 33;

public handler mhandler = new handler()}}

};

自定義控制項練習 滑動解鎖

public class lockview extends view public lockview context context,attributeset attrs public lockview context context,attributeset attrs,int defstylea...

自定義控制項 滑動條SeekBar

一 效果圖 二 實現思路 1.控制項繼承自view 2.重寫兩個方法ondraw 繪製頁面和 ontouch 新增監聽 3.ondraw canvas ca 中 a.new canvas new bitmap backgroundimage backgroundcanvas 並設定控制項背景 b.n...

Android自定義控制項之自定義組合控制項(三)

前兩篇介紹了自定義控制項的基礎原理android自定義控制項之基本原理 一 自定義屬性android自定義控制項之自定義屬性 二 今天重點介紹一下如何通過自定義組合控制項來提高布局的復用,降低開發成本,以及維護成本。1.第一種方式 直接在每個xml布局中寫相同的標題欄布局 這種方式沒有任何布局復用的...