android Seekbar沿着seekbar显示进度值
作者:互联网
我有一个带有搜索栏的列表视图,每个搜索栏代表100%的产品价值.通过移动搜索栏,可以更改%值,我想在用户拖动搜索栏时沿搜索栏显示值的变化.我不希望添加另一个用于更新值的文本框.
我更多地是在寻找栏指针上方显示一个小视图的选项,该视图出现在onStartTracking上而消失在onStopTracking事件上.
有没有办法做到这一点?
解决方法:
这是一种简单的方法,
>在XML中添加textView
>通过seekBar的移动更改其位置
>这将使用setX()对其进行定位
>如果您愿意,也可以为其setY()设置其Y位置
>如果要隐藏,请编写一些逻辑,并在需要时使textView Visibility消失.
例:
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"/>
现在从您的活动
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,android-seekbar 来源: https://codeday.me/bug/20191009/1880584.html