【问题标题】:Setting thumb to a particular position(not the offset) of seekbar programmatically?以编程方式将拇指设置到搜索栏的特定位置(不是偏移量)?
【发布时间】:2013-05-15 05:13:14
【问题描述】:

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

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

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

【问题讨论】:

    标签: android position seekbar


    【解决方案1】:

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

    【讨论】:

    • 是的,我看到一些帖子显示它可以使用 AbsSeekbar,但是你能告诉我任何使用它实现的来源吗?
    • @SreedevR 您可以在这里查看 AbsSeekbar 的 src:grepcode.com/file/repository.grepcode.com/java/ext/… 以了解如何绘制拇指以及如何设置位置。
    • @Sreedev R 精确位置的意思如图所示..??与实际过程稍远?
    【解决方案2】:

    制作一个带有透明进度颜色的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) 相应地移动拇指。

    【讨论】:

      【解决方案3】:

      我不明白你的真正意思,但我可以从你说的做我做的事 尝试使用不同的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);
      
          }
      }
      

      结果就是这样:

      【讨论】:

        【解决方案4】:

        使用 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)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-10-20
          • 2018-12-31
          • 1970-01-01
          • 2013-11-14
          • 2011-03-14
          • 1970-01-01
          相关资源
          最近更新 更多