开发的过程中,遇到了一个问题:如何使ScrollBar往里面缩10dp,而不影响下面内容的展示?
在官方的控件中没有可以使用的api,那只能看源码了。
主要的绘制放在View的onDrawScrollBars方法里面,主要是下面的方法调用:
1
| onDrawVerticalScrollBar(canvas, scrollBar, left, top, right, bottom);
|
然后我们发现,这个方法是protected的:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
protected void onDrawVerticalScrollBar(Canvas canvas, Drawable scrollBar, int l, int t, int r, int b) { scrollBar.setBounds(l, t, r, b); scrollBar.draw(canvas); }
|
那么,一个简单的方式,就是自定义一个子类继承ScrollView或ListView。重写onDrawVerticalScrollBar方法:
1 2 3 4 5 6 7
| @Override protected void onDrawVerticalScrollBar(Canvas canvas, Drawable scrollBar, int l, int t, int r, int b) { canvas.save(); canvas.translate(-mScrollBarPaddingRight, 0); super.onDrawVerticalScrollBar(canvas, scrollBar, l, t, r, b); canvas.restore(); }
|
然后使用这个自定义控件,那么ScrollBar就能如我们所愿缩进啦。记得要设ScrollBarStyle为insideOverlay
。