2011-10-12 38 views
8

我已经自定义了我的SeekBar - 我使用自定义图像作为背景,并使用自定义图像作为拇指(How to create custom layout for seekbar in android? & How to customize the look of a SeekBar in Android?)。SeekBar自定义 - 如何正确定位自定义“拇指”图像?

的想法是做一个搜索栏,看起来像在此图像中的那些:

enter image description here

我希望有拇指图像完全适合圆杆时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的这会产生不同的效果:

enter image description here


经过进一步调查(与完全默认SeekBar尝试此我发现,拇指图像的位置已经从2.1变成了2.2,我修改paddingLeft & paddingRight不是问题。

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

我想我需要做一个自定义的Java类来处理这种类型的东西。在这个问题中(Possible to do rounded corners in custom Progressbar progressDrawable?),开发人员使用ClipDrawable来建立一个正常的进度条。

我会使用什么类型的可绘制对象以及如何正确放置拇指?

回答

5

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

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

enter image description here

+0

谢谢。我更新了我的问题。我不想要的效果仍然存在(也在标准SeekBar上)。当进度值设置为0或最大值时,我希望拇指图像很好地适应条形的每个圆角端。 –

10
seekbar.setThumbOffset(0); 

在运行时。 不是来自XML!

解决了我的问题。

1

终于找到了答案,这里的情况是,你必须使用android:thumbOffset,但android:thumbOffset与进度条沿着拇指地方制定者,但是,它的拇指长度它开始它是中心点,因此seekbar可以在其开始点调整拇指的中心点。所以,如果我们有一个拇指图像与的宽度,所述thumbOffset必须(50/2),使得seekbar将在像素25拇指的调整零值这将使拇指看起来正好在中间。