其他分享
首页 > 其他分享> > android Seekbar沿着seekbar显示进度值

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