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布局中寫相同的標題欄布局 這種方式沒有任何布局復用的...