项目需求定义seekbar,本来以为很简单,但是踩了挺久坑,总结如下:
对于安卓5.1以上的设备,直接定义android:progressDrawable、android:thumb、android:splitTrack即可达到想要的效果。style如下:
false
@drawable/seekbar_background
@mipmap/seekbar_thumb
thumb可使用图片(用于带阴影的滑块)然后配合splitTrack达到滑块透明效果,不会遮挡背景。
对于progressDrawable也只需按常规drawable去写即可,没有什么特别的。
例子:seekbar_background.xml如下:<?xml version="1.0" encoding="utf-8"?>
但是对于5.1需要做不同处理。【1,无法显示进度条】因为按以上的方式无法显示,主要原因是5.1的android:progressDrawable需要三个层级区分。
例子:seekbar_background_v21.xml如下:<?xml version="1.0" encoding="utf-8"?>
然后可以看到背景色了,此外就是滑块的定义,实际上没什么特别的,但如果seekbar限定了高度,【2,滑块无法居中】则需要解决居中问题,解决办法是将高度定义为wrap_content,【3,背景和进度条高度太高】然后会出现背景和进度条太大的问题,这时候使用android:minHeight和android:maxHeight去限制进度条的高度。
在style-v21中定义不同的drawable:
false
@drawable/seekbar_background_v21
@mipmap/seekbar_thumb
wrap_content
4dp
4dp
【4,无法拉满进度条】此外关于滑块无法拉满进度条的问题,主要是下面这个属性的问题
0dp
去除后可正常拉满。
【5,滑块拉满被父view裁剪】关于滑块拉满后被父view裁剪的问题,主要是在父view中加上这两个属性:android:clipChildren="false"android:clipToPadding="false"
以上,seekbar应该没什么问题了。