添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

其实原理很简单,就是在Seekbar在移动时,改变当前时间的位置。

代码以下:ide

public class MainActivity extends RxAppCompatActivity {

private TextView seekCurTime, curTime, totalTime;

private SeekBar seekBar;

//移动步长

private float moveStep;

private int screenWidth;

private static final int TOTALTIME = 300;//5分钟,单位秒

private int curtime;//单位秒

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

initView();

initData();

private void initView() {

seekCurTime = (TextView) findViewById(R.id.curSeekTime);

curTime = (TextView) findViewById(R.id.curTime);

totalTime = (TextView) findViewById(R.id.totalTime);

seekBar = (SeekBar) findViewById(R.id.seekbar);

seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {

@Override

public void onProgressChanged(SeekBar seekBar, int progress, boolean b) {

curtime = progress * TOTALTIME / 100;

curTime.setText(Utils.getAudioTime(curtime));

seekCurTime.setText(Utils.getAudioTime(curtime));

setSeekCurTimeLocation(progress);

@Override

public void onStartTrackingTouch(SeekBar seekBar) {

@Override

public void onStopTrackingTouch(SeekBar seekBar) {

private void initData() {

curTime.setText(Utils.getAudioTime(0));

totalTime.setText(Utils.getAudioTime(TOTALTIME));

seekBar.setMax(100);

screenWidth = getWindowManager().getDefaultDisplay().getWidth() - 60;

moveStep = ((float) screenWidth / 100) * 1.0f;

Observable.

.interval(1, TimeUnit.SECONDS)

.compose(this.bindToLifecycle())

.subscribeOn(Schedulers.io())

.observeOn(AndroidSchedulers.mainThread())

.subscribe(new Observer() {

@Override

public void onCompleted() {

@Override

public void onError(Throwable e) {

@Override

public void onNext(Long aLong) {

curtime++;

int progress = (int) ((float) curtime / TOTALTIME * 100);

seekBar.setProgress(progress);

curTime.setText(Utils.getAudioTime(curtime));

seekCurTime.setText(Utils.getAudioTime(curtime));

setSeekCurTimeLocation(progress);

private void setSeekCurTimeLocation(int progress) {

LinearLayout.LayoutParams layoutParams = (LinearLayout

.LayoutParams) seekCurTime.getLayoutParams();

int marginStart = (int) (progress * moveStep - seekCurTime.getWidth() / 2);

if (marginStart <= seekBar.getWidth() -seekCurTime.getWidth()) {

layoutParams.setMarginStart(marginStart);

seekCurTime.setLayoutParams(layoutParams);

@Override

protected void onDestroy() {

super.onDestroy();

其余实现方式:Android使用SeekBar时动态显示进度且随SeekBar一块儿移动

layout()方法我在使用时无效,因此换成修改LayoutParams了。svg

计算实时进度的marginLeft,还能够经过SeekBar的Thumb的位置来计算,相对更容易些。代码以下:this

private void setSeekProgressLocation() {

ConstraintLayout.LayoutParams layoutParams = (ConstraintLayout.LayoutParams) seekProgressTv.getLayoutParams();

float thumbWidth = sb_progress.getThumb().getBounds().width();

float thumbLeft = sb_progress.getThumb().getBounds().left;

int marginStart = (int) (sb_progress.getLeft() + thumbLeft + thumbWidth / 2 - layoutParams.width / 2);

layoutParams.setMarginStart(marginStart);

seekProgressTv.setLayoutParams(layoutParams);

上述代码中sb_progress为seekbar,seekProgressTv为实时进度的TextView。.net

今天给你们分享一下小例子,就是SeekBar在移动时,当前进度也一块儿移动,具体看图啦。web 其实原理很简单,就是在Seekbar在移动时,改变当前时间的位置。代码以下:idepublic class MainActivity extends RxAppCompatActivity {private TextView seekCurTime, curTime, totalTime;private... 一、自定义控件 用于在 SeekBar 上方,跟随 SeekBar 一块移动的控件 显示 进度 package la.trytry. seekbar ;import android .content.Context; import android .util.Attribu SeekBar Step 是可以设置步长、最小 、最大 的搜索栏 如何使用: m SeekBar Step = ( SeekBar Step) findViewById(R.id.my SeekBar Step); 设置最小 ,最大 ,步骤尝试 { m SeekBar Step.setMaxMin(100, 35, 1); }catch ( SeekBar StepException e){ } 设置 进度 尝试 { m SeekBar Step.setCurrentProgress(10); }catch ( SeekBar StepException e){ } m SeekBar Step.setOn SeekBar StepChangeListener(new SeekBar Step.On SeekBar StepChangeListener() { @Override public void onPr
还记得几年前写过一个双向 seekbar 吗,不足的是不支持步长扩展,老的双向 seekbar 链接 这几天正好做需求,要扩展一个支持步长,一次只能滑动50个,松开,即刻回弹到距离它最近的单位坐标上,WFK.那么我们要开车了. 需求理一下 回弹确定最终 文字描述不能因为太近而遮盖 …..还有一堆扩展属性不说了 老规矩,效果图如下 直接看做出来的成品 接下里就手...
Android 有个群友有个自定义的控件写不出(效果如下),本着救苦救难,就帮他一把,顺便开源出去。 其实这个效果我们去重写 SeekBar 并不好实现,但是通过自定义View还是很好实现的,下面说下思路。我们先画目标(DST)圆角矩形,在其上覆盖源(SRC)圆角矩形,再画两个圆(一个空心,一个实心),步骤就是这么的简单,关键在于位置的计算。 然后是实现后的效果图 首先定义如下 private f