水平progressbar 带底部指示器和文字
来源:互联网 发布:js字符串去掉换行符 编辑:程序博客网 时间:2024/05/02 00:15
根据项目要求需要实现以下效果:
列出源码:
public class TextProgressBar extends LinearLayout { String text; Paint mPaint; private Rect textRect; private Bitmap bitmap; private ProgressBar progressBar; int progress; int proWidth, proHeight; public TextProgressBar(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); initText(context); } public TextProgressBar(Context context) { super(context); initText(context); } public TextProgressBar(Context context, AttributeSet attrs) { super(context, attrs); initText(context); } @Override protected synchronized void onDraw(Canvas canvas) { super.onDraw(canvas); progress = progressBar.getProgress(); if (progress == 0 || progress == progressBar.getMax()) return; this.mPaint.getTextBounds(this.text, 0, this.text.length(), textRect); proWidth = progressBar.getWidth(); proHeight = progressBar.getHeight(); //画指示器 int bitmapx = (int) (progressBar.getLeft() + proWidth * ((progress * 1f) / progressBar.getMax())) - bitmap.getWidth() / 2; int bitmapy = proHeight + bitmap.getHeight() / 2; if (bitmapx < 0) bitmapx = progressBar.getLeft(); if(bitmapx > progressBar.getRight()-bitmap.getWidth()) bitmapx = progressBar.getRight()-bitmap.getWidth(); canvas.drawBitmap(bitmap, bitmapx, bitmapy, mPaint); //写字 int tvx = (int) (progressBar.getLeft() + proWidth * ((progress * 1f) / progressBar.getMax())) - textRect.centerX(); int tvy = proHeight + bitmap.getHeight() * 2 + 4; if (tvx < 0) tvx = progressBar.getLeft(); if(tvx >= progressBar.getRight()-textRect.width()) tvx = progressBar.getRight()-textRect.width(); canvas.drawText(this.text, tvx, tvy + bitmap.getHeight(), this.mPaint); } //初始化,画笔 private void initText(Context context) { View inflate = View.inflate(context, R.layout.textprogressbar, this); progressBar = (ProgressBar) inflate.findViewById(R.id.progressbar1); progressBar.setProgress(50); setWillNotDraw(false); this.mPaint = new Paint(); this.mPaint.setColor(getResources().getColor(R.color.red)); this.mPaint.setTextSize(20); textRect = new Rect(); text = "0"; bitmap = BitmapFactory.decodeResource(context.getResources(), R.mipmap.progress_top); } public void setProgress(int progress) { progressBar.setProgress(progress); } public void setText(String str) { text = str; }}
阅读全文
0 0
- 水平progressbar 带底部指示器和文字
- 简单自定义水平的ProgressBar带文字
- 带三角指示器的ProgressBar
- IndicateProgressBar 带指示器的ProgressBar进度条
- Android自定义进度条-带文本(文字进度)的水平进度条(ProgressBar)
- Android自定义进度条-带文本(文字进度)的水平进度条(ProgressBar)
- Android自定义进度条-带文本(文字进度)的水平进度条(ProgressBar)
- 让按钮底部的指示器的 view 的宽度和按钮里边的文字的宽度相同
- 带有指示器的progressbar
- Android简单自定义圆形和水平ProgressBar
- Android简单自定义圆形和水平ProgressBar
- Android简单自定义圆形和水平ProgressBar
- Android简单自定义圆形和水平ProgressBar
- Android简单自定义圆形和水平ProgressBar
- Android简单自定义圆形和水平ProgressBar
- Android简单自定义圆形和水平ProgressBar
- Android简单自定义圆形和水平ProgressBar
- Android简单自定义圆形和水平ProgressBar
- Android笔记(14)打开相机和图库并裁剪
- Gradle 代理设置
- 167. Two Sum II
- Spark on Yarn配置Trouble shooting
- Python3自定义函数
- 水平progressbar 带底部指示器和文字
- 【剑指Offer】面试题56:链表中环的入口结点
- POJ
- DiscreteFourierTransform API 及FFT(快速傅里叶变化)总结
- 图像分割值得看-大牛的博客
- 解决System.Runtime.CompilerServices.ExtensionAttribute..ctor 与 ‘ExtensionAttribute’ is ambiguous in th
- java将控制台输入的字符串按照空格划分数据存入数组
- RuntimeError: maximum recursion depth exceeded while calling a Python object解决办法
- join()方法