android Seekbar 沿搜索栏显示进度值

标签 android android-seekbar

我有一个带有 seekbarlistview,每个 seekbar 代表 100% 的产品值(value)。通过移动 seekbar 可以更改 % 值,我想在用户拖动 seekbar 时沿着 seekbar 显示值的变化。我希望在更新值的地方添加另一个文本框。

我更多地关注在 seekbar 指针顶部显示小 View 的选项,它出现在 onStartTracking 并消失 onStopTracking 事件。

有什么办法可以实现吗?

最佳答案

这是一个简单的方法,

  • 在您的 XML 中添加一个 textView
  • 随着 seekBar 的移动改变它的位置
  • 这将使用 setX()
  • 定位它
  • 如果你愿意,你也可以为它的 Y 位置提供 setY()
  • 如果你想隐藏一些逻辑,并在需要时使 textView 可见性消失。

例子:

seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
                @Override
                public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {

                    int val = (progress * (seekBar.getWidth() - 2 * seekBar.getThumbOffset())) / seekBar.getMax();
                    textView.setText("" + progress);
                    textView.setX(seekBar.getX() + val + seekBar.getThumbOffset() / 2);
                    //textView.setY(100); just added a value set this properly using screen with height aspect ratio , if you do not set it by default it will be there below seek bar 

                }

或者您可以将 Paint 与您的自定义 SeekBar 类一起使用,而无需任何 TextView

创建一个类

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.widget.SeekBar;


public class MySeekBar extends SeekBar {
    public MySeekBar (Context context) {
        super(context);
    }

    public MySeekBar (Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    public MySeekBar (Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    protected void onDraw(Canvas c) {
        super.onDraw(c);
        int thumb_x = (int) (( (double)this.getProgress()/this.getMax() ) * (double)this.getWidth());
        float middle = (float) (this.getHeight());

        Paint paint = new Paint();
        paint.setColor(Color.BLACK);
        paint.setTextSize(20);
        c.drawText(""+this.getProgress(), thumb_x, middle, paint);
    }
}

在您的 XML 中设置/创建您的 SeekBar

  <yourPackageName.MySeekBar
            android:id="@+id/my_seek_bar"
            android:layout_width="300dp"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_alignParentTop="true"
            android:layout_marginTop="26dp"
            android:max="10"/>

现在从你的 Activity 中

seekBar = (MySeekBar) findViewById(R.id.my_seek_bar);
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
    @Override
    public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
    }

    @Override
    public void onStartTrackingTouch(SeekBar seekBar) {
    }

    @Override
    public void onStopTrackingTouch(SeekBar seekBar) {
    }
});

关于android Seekbar 沿搜索栏显示进度值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41774963/

相关文章:

android - Mediaplayer setOnCompletionListener 重复调用

Android - 自定义 SeekBar - 进度条上的圆角

android - 当来自 Android 发送器应用程序的 Chromecast 时更新电视上的搜索栏

javascript - 保存 `EditText`可见性的状态

android - 为什么我的 SoundPool 是静音的?

android - APN 设置更改

android - SeekBar 从代码中设置线宽和颜色

android - 如何实现价格范围搜索栏?

android - 是否可以使用谷歌地图或其他应用程序绘制坐标路径并在它们之间导航?

android - SKMaps 2.5.1 的导航建议始终为英文