我正在为Android API 16+工作,在API 21设备上进行测试。
我以编程方式使用SeekBar
。我在XML中定义了以下拇指Drawable
:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
<shape android:shape="oval">
<solid android:color="@color/my_red" />
<size android:width="18dp" android:height="18dp" />
</shape>
</item>
<item android:state_selected="true">
<shape android:shape="oval">
<solid android:color="@color/my_red" />
<size android:width="12dp" android:height="12dp" />
</shape>
</item>
<item android:state_focused="true">
<shape android:shape="oval">
<solid android:color="@color/my_red" />
<size android:width="10dp" android:height="10dp" />
</shape>
</item>
<item> <!-- state_default -->
<shape android:shape="oval">
<solid android:color="@color/my_red" />
<size android:width="0dp" android:height="0dp" />
</shape>
</item>
</selector>
我使用SeekBar.setProgressDrawable
应用此drawable。发生的事情是拇指正确使用默认状态drawable(据我所知,拇指没有显示)但永远不会改变。我尝试使用setSelected
,requestFocus
并只是拖动拇指,但它没有改变。
我错过了什么?
编辑:根据@pskink的建议,我更改了我的XML以尝试此操作:
seekbar_thumb_shape.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<solid android:color="@color/my_red" />
<size android:width="20dp" android:height="20dp" />
</shape>
seekbar_thumb.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
<inset android:drawable="@drawable/seekbar_thumb_shape"
android:insetTop="0dp"
android:insetRight="0dp"
android:insetBottom="0dp"
android:insetLeft="0dp" />
</item>
<item android:state_selected="true">
<inset android:drawable="@drawable/seekbar_thumb_shape"
android:insetTop="5dp"
android:insetRight="5dp"
android:insetBottom="5dp"
android:insetLeft="5dp" />
</item>
<item android:state_focused="true">
<inset android:drawable="@drawable/seekbar_thumb_shape"
android:insetTop="5dp"
android:insetRight="5dp"
android:insetBottom="5dp"
android:insetLeft="5dp" />
</item>
<item> <!-- state_default -->
<inset android:drawable="@drawable/seekbar_thumb_shape"
android:insetTop="10dp"
android:insetRight="10dp"
android:insetBottom="10dp"
android:insetLeft="10dp" />
</item>
</selector>
结果非常随机。我也期待一个小动画发生,就像默认的SeekBar动画一样,但它只是粗暴地改变了drawable。
我的目标只是重现一个贴近YouTube Android应用程序的SeekBar。