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

时间:2011-10-12 05:25:44

标签: android seekbar

我自定义了我的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&amp; {{ 1}}不是问题。

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

我想我需要创建一个自定义的java类来处理这类事情。在此问题(Possible to do rounded corners in custom Progressbar progressDrawable?)中,开发人员使用paddingRight来生成正常的进度条。

为了正确定位拇指,我会使用哪种类型的可绘制对象,以及如何正确定位?

4 个答案:

答案 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,并尝试删除填充。它可以帮助您解决问题。

enter image description here

答案 3 :(得分:1)

终于找到了答案,这里的情况是你必须使用android:thumbOffset,但android:thumbOffset 是拇指放置的设置者以及进度条,但是,它的拇指长度开始它的中心点,以便seekbar可以调整拇指& #39; s中心指向它的起点。因此,如果我们的拇指图像宽度 50 ,则thumbOffset必须 25 (50/2),以便seekbar调整拇指的像素25 处的零值将使拇指正好位于中间位置。