如何在自己定制的View的中顯示scrollbar杯活?
首先我說的這個scrollbar免绿,指的是滑動view右側(cè)的滾動條,比如RecyclerView总处、ScrollView等否纬。
scrollbar顧名思義浩螺,只有滾動的view才能有這個bar常挚,那問題就來了性含,如果是我們自定義的一個view兄一,然后有需要在自己的view里面顯示自己scrollbar的需求厘线,這該怎么辦呢
當時接到這個需求的時候一臉懵逼,無可下手出革,研究了一番終于小有成就
原理:
首先一個令我驚訝的是View內(nèi)部早就給我們提供了scrollbar造壮,只是我們平時不用,沒顯示而已骂束,那怎么顯示呢耳璧,API提供了一個awakenScrollBars的方法,我們只要調(diào)用一下展箱,就顯示了旨枯,真的很神奇
顯示的條件:
必須是一個可以滑動的view,可以滑動很容易理解混驰,那是如何體現(xiàn)在代碼中的呢攀隔?
View內(nèi)部提供的方法
我們只要實現(xiàn)了這三個方法,就能代表是可以滑動的栖榨,
range昆汹、offset、extent這個概念是什么意思呢
offset婴栽、extent满粗、range關系
概念很清晰了,滑動的條件只要range > extent愚争,就可以代表view可以滑動映皆,那offset的范圍便是
0 ~(range - extent)。
說了這么多轰枝,我直接上demo吧
自定義的view
public class SView extends View {
public SView(Context context) {
super(context);
}
public SView(Context context,AttributeSet attrs) {
super(context,attrs);
}
public SView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context,attrs,defStyleAttr);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
// 在這里我測試劫扒,顯示滾動條
awakenScrollBars();
return super.onTouchEvent(event);
}
@Override
protected int computeVerticalScrollExtent() {
return 2000;
}
@Override
protected int computeVerticalScrollOffset() {
return 1000;
}
@Override
protected int computeVerticalScrollRange() {
return 3000;
}
}
現(xiàn)在range是3000,extent是2000狸膏,offset的范圍就是0 ~ 1000沟饥。
xml布局中
<android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="vertical"
android:fadeScrollbars="true"/>
(ps:在這里,我僅僅是拿著豎直方向舉例子,水平方向同理)
歡迎大家交流
-end