我自定义了我的SeekBar - 我使用自定义图片作为背景,使用自定义图片作为拇指(How to create custom layout for seekbar in android?& How to customize the look of a SeekBar in Android?)。
我们的想法是制作一个看起来像这张图片中的SeekBar:
当progress
值设置为0或100(满分100)时,我希望拇指图像完全适合圆角条。
为了正确定位拇指(即不与条的两端重叠),我设置了paddingLeft
& paddingRight
的值恰好是拇指宽度的一半(Android: Seekbar doesn't scroll all the way to end)。
... / RES /布局/ main.xml中:
<SeekBar android:id="@+id/frequency_slider"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:max="100" android:progress="0"
android:progressDrawable="@drawable/seekbar_no_visible_progress"
android:thumb="@drawable/seekbar_thumb" <!-- this is an image -->
android:background="@drawable/hos_bar" <!-- this is an image -->
android:paddingLeft="24dp"
android:paddingRight="24dp">
</SeekBar>
适用于Android 2.1。
在Android 2.2中,这会产生不同的效果:
经过进一步调查(并使用完全默认SeekBar
进行尝试后,我发现拇指图像的位置已从2.1更改为2.2。我修改了paddingLeft
&amp; {{ 1}}不是问题。
我想我需要创建一个自定义的java类来处理这类事情。在此问题(Possible to do rounded corners in custom Progressbar progressDrawable?)中,开发人员使用paddingRight
来生成正常的进度条。
为了正确定位拇指,我会使用哪种类型的可绘制对象,以及如何正确定位?
答案 0 :(得分:10)
seekbar.setThumbOffset(0);
在运行时。 不是来自XML!
解决了我的问题。
答案 1 :(得分:5)
thumbOffset参数的行为在这两个版本之间发生了变化。与提供的位置参数相比,ThumbOffset确定拇指图像的实际偏移量。
答案 2 :(得分:1)
尝试使用:
<SeekBar android:id="@+id/seek"
android:layout_width="fill_parent"
android:layout_height="73dip"
android:max="80"
android:progress="12"
android:maxWidth="273dip"
android:maxHeight="73dip"
android:secondaryProgress="255"
android:background="@drawable/image2" <!-- this is an image -->
android:progressDrawable="@drawable/image1" <!-- this is an image -->
android:thumb="@drawable/lock_thumb"
/>
我试过这个,它与2.1和2.2完美配合。
在你的情况下,尝试像我一样调整maxWidth,max和progress,并尝试删除填充。它可以帮助您解决问题。
答案 3 :(得分:1)
终于找到了答案,这里的情况是你必须使用android:thumbOffset
,但android:thumbOffset
不是拇指放置的设置者以及进度条,但是,它的拇指长度从开始到它的中心点,以便seekbar
可以调整拇指& #39; s中心指向它的起点。因此,如果我们的拇指图像宽度 50 ,则thumbOffset必须 25 (50/2),以便seekbar
调整拇指的像素25 处的零值将使拇指正好位于中间位置。