以编程方式将thumb设置为seekbar的特定位置(而不是偏移量)?

问题描述 投票:10回答:4

我有一个自定义的搜索栏,其中更新声音的进度和最大振幅。因此,搜索栏根据声音检测而变化,拇指显示声音的最大宽度。我想将拇指的位置设置为特定位置(Max Amblitude),就像我们在搜索栏中设置进度一样。我经历了大量的问题和答案,并且我还浏览了开发人员文档。在开发人员文档中,它提到只能给出偏移,这使得拇指不能跟上进度。

来自Developer Doc setThumbOffset(int thumbOffset) - 设置允许拇指伸出轨道范围的拇指偏移。

有没有办法将拇指设置到特定位置。样品如下所示。在这里我设置了拇指偏移量来显示一个样本,而不是这个我想把拇指设置到一个准确的位置。

android position seekbar
4个回答
2
投票

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


1
投票

制作具有透明渐变色的custom progress bar

<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)相应地移动拇指。


1
投票

我不明白你的意思,但我可以理解你说的做我做了什么尝试使用不同的drawbles让我给你举个例子:

你的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);

    }



}

你的问题:

你可以做的是simple只是重命名相同的drawable像这样:

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);

    }
}

这就是结果:


0
投票

使用LayerDrawable作为拇指绘图。比改变层内的drawable而不是拇指的drawable。

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

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

然后通过代码更改drawable:

(thumb as LayerDrawable).setDrawableByLayerId(R.id.thumbImage, otherDrawable)
© www.soinside.com 2019 - 2024. All rights reserved.