Android SeekBar、進捗状況を動的に表示し、SeekBarとともに移動
5147 ワード
https://www.jianshu.com/p/46242fde8cee
問題:スライドする時だけ、数字はスライドして、初期化の数字の位置を設定する時、変化していません.seekbarのためです.getWith()はずっと0で、何が原因なのか、主な原因はoncrate()の時、コントロールがまだ初期化されておらず、手に入れた大きさも幅も0なので、他の場所で幅を高くするべきで、解決方法https://mp.csdn.net/postedit/83106769
次はseekbar_layout.xmlコード
次は進捗バーのスタイルpo_seekbar.xml、スタイルを変える必要がある場合はこれが必要です
問題:スライドする時だけ、数字はスライドして、初期化の数字の位置を設定する時、変化していません.seekbarのためです.getWith()はずっと0で、何が原因なのか、主な原因はoncrate()の時、コントロールがまだ初期化されておらず、手に入れた大きさも幅も0なので、他の場所で幅を高くするべきで、解決方法https://mp.csdn.net/postedit/83106769
package com.xq.customview;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.util.Log;
import android.widget.SeekBar;
import android.widget.TextView;
/**
*/
public class ThreeActivity extends Activity {
private int startTimeStr = 50;
private int endTimeStr =100;
private TextView textView;
private SeekBar seekBar ;
/**
*
*/
private int totalSeconds = 0;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.seekbar_layout);
textView = findViewById(R.id.seek_text);
//seekbar
seekBar = findViewById(R.id.seekBar);
totalSeconds = endTimeStr - startTimeStr;
seekBar.setProgress(50);
textView.setText(check(50));
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
// -50~50 , seekbar.getmin() , 0~100 -50;
int text = progress ;
//
textView.setText(check(progress));
Log.d("=====ssss",text+"");
//
float textWidth = textView.getWidth();
// seekbar x
float left = seekBar.getLeft();
//
float max =Math.abs(seekBar.getMax());
// thumb , seekbar , ,seekbar , , xml paddingStart paddingEnd , 15dp;
float thumb = dip2px(ThreeActivity.this,15);
// 1 ,text = (seekBar - ) / progress
float average = (((float) seekBar.getWidth())-2*thumb)/max;
//int to float
float currentProgress = progress;
//textview = seekbar + seekbar + progress - textview ( )
float pox = left - textWidth/2 +thumb + average * currentProgress;
textView.setX(pox);
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
}
public int dip2px(Context context, float dpValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (dpValue * scale + 0.5f);
}
private String check(int progress) {
int curValue = totalSeconds * progress/Math.abs(endTimeStr);
curValue = curValue + startTimeStr;
Log.e("check", totalSeconds+","+curValue+","+ seekBar.getMax()+"progress"+progress);
return String.valueOf(curValue);
}
}
次はseekbar_layout.xmlコード
次は進捗バーのスタイルpo_seekbar.xml、スタイルを変える必要がある場合はこれが必要です
-
-
-