我有一个带有 seekbar
的 listview
,每个 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/