我有一个listview
与seekbar
每个seekbar
代表产品的值的100%.通过移动seekbar
可以更改%值,我想在用户拖动时显示沿搜索条的值的变化seekbar
.我不希望再添加一个文本框,值被更新.
我更关注在seekbar指针顶部显示一个小视图的选项,它会出现onStartTracking
并消失onStopTracking
事件.
有没有办法实现这个目标?
这是一个简单的方法,
textView
在XML中添加一个
通过移动来改变它的位置 seekBar
这将使用它 setX()
如果你想要,你也可以给setY()
它的Y位置
如果你想隐藏写一些逻辑,并textView
在你需要时使Visibility GONE.
例:
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); } }
SeekBar
在XML中设置/创建您的
现在来自你的活动
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) { } });