為了理解wheelview滾輪實現效果,我按照wheelview原始碼簡單的依樣畫葫蘆。
某些關鍵的計算:
1,滑動偏移量
2.顯示的範圍itemsrange,這個非常關鍵,移除item,跟新增item需要這個範圍
private itemsrange getitemsrange()
int first = currentitem;
int count = 1;
while (count * getitemheight() < getheight())
return new itemsrange(first, count);
}
3.linearlayout布中顯示
private void drawitems(canvas canvas)
理解wheelview開源原始碼的實現思路:
1.自定義view---wheelview,通過canvas畫出乙個linearlayout的內容,能正確把linearlayout顯示出來,完成第一步。
@override
protected void ondraw(canvas canvas)
@override
public void layout(int l, int t, int r, int b)
protected void onmeasure(int widthmeasurespec, int heightmeasurespec) else
}setmeasureddimension(width, height);
log.d("uuu", "onmeasure" + itemslayout.getchildcount());
}
2.通過touch事件(使用原始碼的wheelscroller輔助類)讓linearlaout移動,且每超過乙個子類的高度就重設scrollingoffset,並計算移動的item數量
@override
public void onscroll(int distance)
3.通過itemsrange的範圍更新linear layout的內容,增刪linear layout子類。如果linear layout有增刪子類的話,需要重新 layout 與measure
private void updateview()
}
private boolean rebuilditems() else
if (!updated)
//firstitem在可視範圍中
if (firstitem > range.getfirst() && firstitem <= range.getlast())
firstitem = i;
}} else
//不在可視範圍
int first = firstitem;
for (int i = itemslayout.getchildcount(); i < range.getcount(); i++)
}firstitem = first;
log.d("uuu", "visibleitems=" + visibleitems + " firstitem=" + firstitem + " itemslayout.getchildcount()= " + itemslayout.getchildcount());
return updated;
}
4.滑動結束後,調整item位置
@override
public void onjustify()
}
wheel類的整個流程:
1.初始化:onmeasue --> layout --> buildviewformeasureing --> ondraw--->updateview
buildviewformeasureing --- 初始化linearlayout 內容
ondraw --- 畫linearlayout 的canvas
2.滑動的時候:onscroll-->invalidate-->ondraw--->updateview --->recycleitems(如果內容變化--->linearlayout layout).--->onjustify
onscroll--- 設定偏移量,與當前位置currentitem.
invalidate----滑動的後重新整理
ondraw----畫linearlayout 的最新位置
updateview----
recycleitems----獲取itemsrange,移除已出itemsrange的view,再增加進入itemsrange的view
原始碼:
滑鼠滾輪控制網頁橫向移動實現思路
複製 如下 body mousewheel function event,delta jquery實現網頁橫向滾動的 需要乙個mousewheel.js 簡單說就是設定window的scrollleft值,這裡一定要是window不能是body否則滾動有問題。很納悶。繫結事件mousewhell 也...
js學習筆記 095 滑鼠滾輪事件
學習本節時,除firefox 媽的,firefox終於各色了一把 外所有瀏覽器都支援 mousewheel 事件,但firefox支援dommousescroll 而dom3規範草案建議使用名 wheel 替代 mousewheel 在firefox中,可以使用非標準的dommousescroll事...
MySQL學習思路
最近拜讀了君三思老師的新作 塗抹mysql 跟著三思一步一步學mysql 感覺對整個mysql的學習思路有了更深入的認識,模擬之前學習oracle的過程與思路,學習mysql應該也有一種思路。從知識體系講,我認為oracle資料庫相關的知識和技能可以分為五個大的方面,10個小的方面 oracle的基...