SeekBar自定义 – 如何正确定位自定义的“拇指”图像?

我已经定制了我的SeekBar – 我使用自定义图像作为背景,并将自定义图像作为拇指( 如何在android中为seekbar创build自定义布局?以及如何自定义Android中SeekBar的外观? )。

这个想法是做一个看起来像这个图像中的SeekBar:

在这里输入图像说明

我希望当progress值设置为0或100(满分100)时,拇指图像可以很好地适合圆形条。

为了正确定位拇指(即不重叠条的两端),我已经将paddingLeftpaddingRight值设置为拇指宽度的一半( Android:Seekbar不会一直滚动到结尾 )。

… / 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。我改变了paddingLeftpaddingRight黑客不是问题。

  • 在2.1中,拇指集中在酒吧的末端,拇指的一半放在酒吧上,一半放在酒吧外面。
  • 在2.2中,拇指位于条内,没有任何重叠。 因此,填充值影响结果的奇怪方式。 这是我想要实现的,但是当使用自定义的拇指时,这种效果不再以相同的方式工作。

我想我需要做一个自定义的Java类来处理这种types的事情。 在这个问题( 可能在自定义Progressbar progressDrawable做圆angular? ),开发人员使用ClipDrawable为了使一个正常的进度条。

我将使用什么types的可绘制对象,以及如何正确放置拇指?

Related of "SeekBar自定义 – 如何正确定位自定义的“拇指”图像?"

这两个版本之间thumbOffset参数的行为已经改变。 与提供的位置参数相比,ThumbOffset确定拇指图像的实际偏移量。

 seekbar.setThumbOffset(0); 

在运行时。 不是从XML!

解决了我的问题。

尝试使用这个:

 <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和像我一样的进步,并尝试删除填充。 这可能会帮助你解决问题。

在这里输入图像说明

终于find了答案,这里的情况是,你必须使用android:thumbOffset ,但android:thumbOffset 不是拇指放置的进度条的设置器,但是, 它开始它的中心点是拇指长度所以searchseekbar可以在开始点调整拇指的中心点。 所以,如果我们有一个宽度为50的拇指图像,thumbOffset必须是25 (50/2),这样, seekbar将调整拇指的像素25零值 ,这将使得拇指看起来像是正好在中间。