11

我有一个定制的搜索栏,其中正在更新声音的进度和最大幅度。所以搜索栏会根据声音检测而变化,拇指显示声音的最大振幅。我想将拇指的位置设置为特定位置(最大振幅),就像我们在搜索栏中设置进度一样。我经历了很多问题和答案,还浏览了开发者文档。在开发人员文档中,它提到只能给出偏移量,以使拇指远离进度。

来自开发者文档 setThumbOffset(int thumbOffset)-- 设置拇指偏移量,允许拇指延伸到轨道范围之外。

有没有可能将拇指设置到特定位置的方法。示例如下所示。在此,我设置了拇指偏移量以仅显示示例,而不是将拇指设置为准确的位置。

在此处输入图像描述

4

4 回答 4

2

我认为您可以使用 setProgress(int progress) 设置拇指位置,因为在 SeekBar 中,拇指将显示在进度表的末尾。
如果你想设置拇指的位置独立于进度,那么你可以实现自己的 SeekBar extends AbsSeekBar,你可以参考 SeekBar 的src

于 2013-05-15T05:58:44.257 回答
2

制作具有透明进度颜色 的自定义进度条。

<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >

    <item
        android:id="@android:id/background"
        android:drawable="@drawable/my_background"/>
    <item android:id="@android:id/progress">
        <clip android:drawable="@android:color/transparent" />
    </item>
    <item android:id="@android:id/secondaryProgress">
        <clip android:drawable="@drawable/my_visual_progress" />
    </item>

</layer-list> 

使用setSecondaryProgress(int)设置进度条的视觉“进度”。

并使用setProgress(int)相应地移动拇指。

于 2013-05-29T22:55:14.763 回答
1

I don't understand what you really mean but as I can understand from what you say do what I did Try using different drawbles Let me show you an example:

Your code .java

import android.os.Bundle;
import android.app.Activity;
import android.graphics.drawable.Drawable;
import android.widget.SeekBar;

public class MainActivity extends Activity {
    private SeekBar seekBar1;

    private SeekBar seekBar2;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
         seekBar1 = (SeekBar) findViewById(R.id.seekBar1);
         seekBar2 = (SeekBar) findViewById(R.id.seekBar2);
         seekBar1.setProgress(15);
         seekBar2.setProgress(55);
         Drawable ii = getResources().getDrawable(R.drawable.ii);
        // Drawable iii = getResources().getDrawable(R.drawable.ii);
         seekBar1.setThumb(ii);
         seekBar2.setThumb(ii);

    }



}

Your problem:

enter image description here

What you can do is simple just rename the same drawable like this:

import android.os.Bundle;
import android.app.Activity;
import android.graphics.drawable.Drawable;
import android.widget.SeekBar;

public class MainActivity extends Activity {
    private SeekBar seekBar1;

    private SeekBar seekBar2;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
         seekBar1 = (SeekBar) findViewById(R.id.seekBar1);
         seekBar2 = (SeekBar) findViewById(R.id.seekBar2);
         seekBar1.setProgress(15);
         seekBar2.setProgress(55);
         Drawable ii = getResources().getDrawable(R.drawable.ii);
         Drawable iii = getResources().getDrawable(R.drawable.ii);
         seekBar1.setThumb(ii);
         seekBar2.setThumb(iii);

    }
}

And that's the result:

enter image description here

于 2013-11-10T18:53:14.583 回答
0

使用 LayerDrawable 作为拇指可绘制对象。比更改图层内的可绘制对象而不是拇指的可绘制对象。

<?xml version="1.0" encoding="utf-8"?>

<item  android:id="@+id/thumbImage"     android:drawable="@drawable/normalDrawable"/>

比通过代码更改drawble:

(thumb as LayerDrawable).setDrawableByLayerId(R.id.thumbImage, otherDrawable)
于 2019-04-10T07:00:14.150 回答