recycleview的scrollbar的背景

最近遇到了一个问题:需要将一张图片设置为recycleview的scrollbar的背景,直接设置

 android:scrollbarThumbVertical="@drawable/icon_scrollbar"

这里的icon_scrollbar为一张切图,但实际上呈现的效果是如下图:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1751bGsT-1665319216967)(http://image.openwrite.cn/29750_6BFB8CECD5A941328633FC572A039E57)]
可以看到图片被拉伸了
而当这张图片放在android项目drawable下,用layer-list进行包装,

  android:scrollbarThumbVertical="@drawable/shape_scrollbar_thumb"

shape_scrollbar_thumb 内容为:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
   <item
       android:height="82dp"
       android:drawable="@drawable/icon_scrollbar"
       />
</layer-list>

呈现的效果就满足需求:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bgeKZFRR-1665319216969)(http://image.openwrite.cn/29750_71792532281D414580896F7CEEE8ABDC)]

就这一现象,引发出以下几个知识点?

1、drawble是什么?
Android把可绘制的对象抽象为Drawable,不同的图形图像资源就代表着不同的drawable类型。Android FrameWork提供了一些具体的Drawable实现,通常在代码中都不会直接接触Drawable的实现类。
在实际的开发过程中,会把使用到的资源都放置在res/drawable目录,剩下的工作交给Android SDK 就行了,当需要使用图片资源的时候,可以使用@drawable标志在xml中引用drawable资源就行,也可以在代码中使用id引用这些drawable资源。

2、从layer-list获取drawble对象和直接从图片获取drawble的区别?
当你直接从drwable获取图片时,返回的是BitmapDrawable,recycleview会根据item的多少改变高度,所以图片会被拉伸。而用layer-list包装一层,返回的layerDrawable,同样拉伸时,整个drawable数组会被拉伸,但此时图片是item里面的一个子元素已经被指定了高度,图片则不会被拉伸。简单来说即:layer-list返回的是个整体的viewGroup,把layerlist看成一个关于图片的framelayout。每一子项都可以控制位置,间距,以及大小,如果里面的子控件自身指定了宽高等特性就由自身决定,如果没有指定,则取决于外部。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐