1

JAVA

        @Override
        public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
            app.iMeter = progress;

            Bitmap b = BitmapFactory.decodeResource(getResources(), R.drawable.slider_pad_2x).copy(Bitmap.Config.ARGB_8888, true);

            float scale = getResources().getDisplayMetrics().density;
            float x = (int) (17 * scale + 0.5f);
            int y = (int) ((b.getHeight()/2-3) * scale + 0.5f);

            if(seekBar.getProgress() > 9) {
                x = (int) (14 * scale + 0.5f);
            }
            if(seekBar.getProgress() > 99) {
                x = (int) (11 * scale + 0.5f);
            }

            Canvas canvas = new Canvas(b);
            canvas.drawText(""+progress, x, y, paint);
            BitmapDrawable bd = new BitmapDrawable(b);

            bd.setBounds(0, 0, bd.getIntrinsicWidth(), bd.getIntrinsicHeight());

            seekBar.setThumb(bd);
        }

XML

        <SeekBar
                android:id="@+id/seekBar1"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_gravity="center_vertical"
                android:layout_marginLeft="10dp"
                android:background="@drawable/slider_background_2x"
                android:max="200"
                android:paddingLeft="17dp"
                android:paddingRight="16dp"
                android:progress="0"
                android:progressDrawable="@drawable/transparant_dot"
                android:thumb="@drawable/slider_pad_2x" />

我正在 2 个不同版本的 android 设备上对其进行测试:

  • 安卓 2.3.6
  • 安卓 4.2.2

在 4.2.2 上,它可以正常工作。可绘制对象显示在其上绘制的进度值。在 2.3.6 上,拇指卡在开头。当我尝试移动它时,拇指上的值确实会改变,但它仍然卡住。

我可以删除 setBounds,它仍然适用于 4.2.2,但在 2.3.6 上,当我触摸它时,拇指将完全消失。

有任何想法吗?

4

1 回答 1

1

似乎在 Android < 2.3.x 上,拇指的边界只是在进度改变时更新,而不是在调用时更新setThumb()。这就是为什么您必须setBounds()在将 Drawable 设置为 Thumb 之前调用它以使其完全可见的原因。但是当你打电话

bd.setBounds(0, 0, bd.getIntrinsicWidth(), bd.getIntrinsicHeight());

您还设置了位置,因此在开始时将其锁定。在这种情况下调用Android > 4.0setBounds()时,调用您的可绘制对象不会执行任何操作。setThumb()setBounds()

为了解决这个问题,您可以通过自己计算来给出正确的界限。有关示例,请参见此处。

我有自己的类扩展了 SeekBar,因此super.onSizeChanged()在设置拇指后调用它为我解决了它。

于 2013-07-15T21:40:30.903 回答