通過listview實現自定義TimePicker附帶動畫效果
阿新 • • 發佈:2019-02-06
通過listview實現自定義TimePicker
歡迎加安卓開發交流群:308372687(博主儘可能幫助大家)
老規矩先上效果圖:
看了這個效果圖,大家不要疑惑,沒錯這就是我們常見的listview。次控制元件沒用重寫listview的程式碼,只不過通過一個adapter實現這種高階效果。下面看看具體的分析實現吧。
幾個要點:
1.如何實現迴圈滾動的listview。
2.如何實現滑動動畫。
3.如果實現多種不同大小的item。
1.如何實現迴圈滾動的listview。
思路:把原有的資料已3倍。對映到listview中。通過onScroll方法,不斷將滑動的位置返回到中間。比如資料是12345。那麼我們的listview資料就是123451234512345。如果我們到了第3個4的位置。那麼就回到第2個4的位置。這樣就實現了迴圈。如果資料量夠大,我們用3倍,如果特別少那麼就可以用5倍甚至7倍來優化滑動迴圈。
程式碼:
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
// TODO Auto-generated method stub
top = firstVisibleItem;
if (firstVisibleItem <= 2) {
listView.setSelection(max + 2);
} else if (firstVisibleItem + visibleItemCount > m1111.getCount() - 2) {
listView.setSelection(firstVisibleItem - max);
}
}
2.如何實現滑動動畫。
思路:通過listview實現onScrollStateChanged介面,監聽到正在滾動,停止滾動事件。改變相應的item size欄位。並後用通過adapter映射出來。在adapter中的getview方法中實現屬性動畫。
itembean的程式碼:
public class ItemBean {
public String num;
public int size;
public ItemBean(String num,int size) {
this.num=num;
this.size=size;
}
}
滾動重新整理itembean
if (scrollState == SCROLL_STATE_TOUCH_SCROLL && byaotu == false) {
if (lockforsrcoll == false) {
dataList.clear();
for (int i = 0; i < max * 3; i++) {
dataList.add(new ItemBean("" + i % max, 0));
}
m1111.notifyDataSetChanged();
}
3.如果實現多種不同大小的item。
思路:仔細觀察gif可以發現,item共有6種形態。最大,小1上,小1下,小2上,小2下,滾動中。我們為這6種形態設定6種不通的size值並在adapter中的getview方法中,進行相應的大小變化從而實現不通的大小item並附帶動畫效果。
比如當size為-1是時。
if (bean.size==-1) {
ObjectAnimator a2=ObjectAnimator.ofFloat( holder.numtextview, "scaleX",b(1.2F),b(1F));
a2.setDuration(CHANGETIME);
a2.start();
ObjectAnimator a22=ObjectAnimator.ofFloat( holder.numtextview, "scaleY", b(1.2F),b(1F));
a22.setDuration(CHANGETIME);
a22.start();
ObjectAnimator a33=ObjectAnimator.ofFloat( holder.numtextview, "RotationX", 0,30);
a33.setDuration(CHANGETIME);
a33.start();
ObjectAnimator.ofFloat(holder.numtextview, "Alpha", 0.4F,0.6F).setDuration(CHANGETIME).start();
holder.numtextview.setText(bean.num);
}
這個例子也為了說明,很多效果的實現不一定很死板,程式碼要靈活。不是要效果就一定要去重寫view。谷歌有很多已經為我們封裝好很多東西,大家靈活的去使用吧!
歡迎加安卓開發交流群:308372687(博主儘可能幫助大家)