Android带数字的进度条
进度条一边走,上分进度数字也跟着走,显示当前百分比。
一、思路:
通过进度条进度计算ViewGroup.MarginLayoutParams,设给TextView
二、效果图:
三、关键代码:
public class MainActivity extends AppCompatActivity {
private ProgressBar progesss;
private TextView progesssValue;
private LinearLayout full;
private ImageView iv_cicle;
protected static final int WHAT_INCREASE = 1;
private int progress;
private Handler handler = new Handler() {
public void handleMessage(android.os.Message msg) {
progress++;
progesss.setProgress(progress);
setPos();
handler.sendEmptyMessageDelayed(WHAT_INCREASE, getRadomNumber(50, 200));
if (progress == 100) {
handler.removeMessages(WHAT_INCREASE);
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
progesss = (ProgressBar) findViewById(R.id.progesss1);
progesssValue = (TextView) findViewById(R.id.progesss_value1);
full = (LinearLayout) findViewById(R.id.full);
iv_cicle = (ImageView) findViewById(R.id.iv_cicle);
findViewById(R.id.tv_move).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
progress = 0;
progesss.setProgress(progress);
setPos();
handler.removeMessages(WHAT_INCREASE);
handler.sendEmptyMessage(WHAT_INCREASE);
}
});
// progesss.setProgress(100);
// setPos();
}
/**
* 设置进度显示在对应的位置
*/
public void setPos() {
int w = progesss.getWidth();
Log.e("w=====", "" + w);
ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) progesssValue.getLayoutParams();
ViewGroup.MarginLayoutParams paramsImage = (ViewGroup.MarginLayoutParams) iv_cicle.getLayoutParams();
int pro = progesss.getProgress();
int tW = progesssValue.getWidth();
if (w * pro / 100 + tW * 0.3 > w) {
params.leftMargin = (int) (w - tW * 1.1);
paramsImage.leftMargin = (int) (w - tW * 1.1)+5;
} else if (w * pro / 100 < tW * 0.7) {
params.leftMargin = 0;
paramsImage.leftMargin = 0;
} else {
params.leftMargin = (int) (w * pro / 100 - tW * 0.7);
paramsImage.leftMargin = (int) (w * pro / 100 - tW * 0.7)+5;
}
四、项目demo源码结构图:
有问题或者需要完整源码demo的可以看简介联系我,也可以私信我,我每天都看私信的