我的布局中有一个搜索栏,我在xml文件中将paddings和thumbOffset设置为8dp。
<SeekBar
android:id="@+id/seekBar1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/graph"
android:layout_marginTop="10dp"
android:max="100"
android:paddingLeft="8dp"
android:paddingRight="8dp"
android:thumbOffset="8dp"
android:progress="97"
android:progressDrawable="@drawable/rounded_corner_seekbar" />
我遇到的问题是,当进度接近结束时(但不是结束时),进度线将提前(如果进度> 50)或后进(如果进度<50)。此图像显示了正在发生的事情(进度分别设置为97和3):
你可以看到第一个拇指前面的进度线,第二个拇指面前的进度线。
如果我将paddings和thumbOffset设置为默认值,那么就不会发生这种情况,但是,拇指不会在rectagle内部开始,它将是它的优势。
我正在寻找的解决方案是让背景更大的方法,所以拇指将在里面,但进度线将跟随拇指的中心。
这里是我如何定义搜索栏的背景:
<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
<!-- view background color -->
<solid
android:color="#000000" >
</solid>
<!-- view border color and width -->
<stroke
android:width="2dp"
android:color="#FFFFFF" >
</stroke>
<!-- Here is the corner radius -->
<corners
android:radius="5dp" >
</corners>
</shape>
主要问题是进度线总是从矩形的边缘开始,而拇指可能不会因为填充和thumbOffset。如果我找到一种方法让线条开始和结束在与拇指相同的位置,它也会起作用。
答案 0 :(得分:1)
解决方案刚刚设置-android:thumbOffset="0dp"
答案 1 :(得分:0)
将代码放在style.xml
中<style name="SeekBarMyTheme" parent="android:Widget.Holo.Light.SeekBar">
<item name="android:progressDrawable">@drawable/mytheme_scrubber_progress_horizontal_holo_light</item>
<item name="android:indeterminateDrawable">@drawable/mytheme_scrubber_progress_horizontal_holo_light</item>
<item name="android:thumb">@drawable/mytheme_scrubber_control_selector_holo_light</item>
</style>
在可绘制文件夹中创建 mytheme_scrubber_control_disabled_holo 布局
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="false" android:drawable="@drawable/mytheme_scrubber_control_disabled_holo" />
<item android:state_pressed="true" android:drawable="@drawable/mytheme_scrubber_control_pressed_holo" />
<item android:state_selected="true" android:drawable="@drawable/mytheme_scrubber_control_focused_holo" />
<item android:drawable="@drawable/mytheme_scrubber_control_normal_holo" />
</selector>
在可绘制文件夹中创建 mytheme_scrubber_progress_horizontal_holo_light 布局
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@android:id/background"
android:drawable="@drawable/mytheme_scrubber_track_holo_light" />
<item android:id="@android:id/secondaryProgress">
<scale android:scaleWidth="100%"
android:drawable="@drawable/mytheme_scrubber_secondary_holo" />
</item>
<item android:id="@android:id/progress">
<scale android:scaleWidth="100%"
android:drawable="@drawable/mytheme_scrubber_primary_holo" />
</item>
</layer-list>
在可绘制文件夹中创建 mytheme_scrubber_control_selector_holo_light 布局
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="false" android:drawable="@drawable/mytheme_scrubber_control_disabled_holo" />
<item android:state_pressed="true" android:drawable="@drawable/mytheme_scrubber_control_pressed_holo" />
<item android:state_selected="true" android:drawable="@drawable/mytheme_scrubber_control_focused_holo" />
<item android:drawable="@drawable/mytheme_scrubber_control_normal_holo" />
</selector>
毕竟, 以apptheme
的风格写下这一行 <item name="android:seekBarStyle">@style/SeekBarMyTheme</item>
这将是你的搜索栏布局:
<SeekBar
android:id="@+id/songProgressBar"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_marginBottom="8dp"
android:paddingLeft="16dp"
android:paddingRight="16dp" />
注意: - mytheme_scrubber_control_normal_holo,mytheme_scrubber_control_pressed_holo,mytheme_scrubber_control_focused_holo,mytheme_scrubber_control_normal_holo 这些都在drawable文件夹中,并且是.png文件。
希望它能帮到你, 如果有任何疑虑,请告诉我。