返回列表 发新帖

【只是灌水】Android绘制反色文字进度条

[复制链接]

92

主题

1313

帖子

6405

积分

硕士生

Rank: 6Rank: 6

金币
722
好评
106
贡献
3

考神MT论坛帅哥MT论坛活跃会员MT论坛最佳新人

发表于 2019-7-2 13:07:54 来自手机  | 显示全部楼层 | 阅读模式
本帖最后由 夏糜 于 2019-7-2 13:09 编辑
  1. public class MyProgressView extends View {

  2.     private Paint mPaint;

  3.     private int viewWidth, viewHeight;

  4.     private float maxProgress = 100;

  5.     private float progress = 0;

  6.     private Bitmap progressBitmap, textBitmap;

  7.     private Canvas proCanvas, textCanvas;

  8.     private RectF dstRect, srcRect;

  9.     private Xfermode xfermode = new PorterDuffXfermode(PorterDuff.Mode.XOR);

  10.     public MyProgressView(Context context) {
  11.         this(context, null);
  12.     }

  13.     public MyProgressView(Context context, AttributeSet attrs) {
  14.         this(context, attrs, 0);
  15.     }

  16.     public MyProgressView(Context context, AttributeSet attrs, int defStyleAttr) {
  17.         super(context, attrs, defStyleAttr);
  18.         init(context);
  19.     }

  20.     private void init(Context context) {
  21.         mPaint = new Paint();
  22.         mPaint.setAntiAlias(true);
  23.         mPaint.setTextSize(100);
  24.     }

  25.     @Override
  26.     protected void onSizeChanged(int w, int h, int oldw, int oldh) {
  27.         super.onSizeChanged(w, h, oldw, oldh);
  28.         viewWidth = w;
  29.         viewHeight = h;
  30.         progressBitmap = Bitmap.createBitmap(viewWidth, viewHeight, Bitmap.Config.ARGB_8888);
  31.         textBitmap = Bitmap.createBitmap(viewWidth, viewHeight, Bitmap.Config.ARGB_8888);
  32.         proCanvas = new Canvas(progressBitmap);
  33.         textCanvas = new Canvas(textBitmap);
  34.         srcRect = new RectF(0, 0, w, h);
  35.         dstRect = new RectF(0, 0, w, h);
  36.     }

  37.     public MyProgressView setMaxProgress(float maxProgress) {
  38.         this.maxProgress = maxProgress;
  39.         return this;
  40.     }

  41.     public void setProgress(float progress) {
  42.         this.progress = progress;
  43.         proCanvas.drawColor(Color.WHITE, PorterDuff.Mode.CLEAR);
  44.         mPaint.setColor(Color.BLUE);
  45.         proCanvas.drawRect(0, 0, viewWidth * (progress / maxProgress), viewHeight, mPaint);
  46.         String text = String.format(Locale.getDefault(), "%.2f%%", progress);
  47.         mPaint.setColor(Color.RED);
  48.         Paint.FontMetrics metrics = mPaint.getFontMetrics();
  49.         float fontHeight = metrics.bottom - metrics.top;
  50.         float textBaseY = viewHeight - (viewHeight - fontHeight) / 2 - metrics.bottom;
  51.         textCanvas.drawColor(Color.WHITE, PorterDuff.Mode.CLEAR);
  52.         textCanvas.drawText(text, (viewWidth - mPaint.measureText(text)) / 2, textBaseY, mPaint);
  53.         invalidate();
  54.     }

  55.     @Override
  56.     protected void onDraw(Canvas canvas) {
  57.         super.onDraw(canvas);
  58.         int saveCount = canvas.saveLayer(srcRect, mPaint, Canvas.ALL_SAVE_FLAG);
  59.         //这里先绘制底部的进度条
  60.         canvas.drawBitmap(progressBitmap, null, srcRect, mPaint);
  61.         //设置混合模式
  62.         mPaint.setXfermode(xfermode);
  63.         //在回事文本
  64.         canvas.drawBitmap(textBitmap, null, dstRect, mPaint);
  65.         mPaint.setXfermode(null);
  66.         canvas.restoreToCount(saveCount);
  67.     }
  68. }
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

92

主题

1313

帖子

6405

积分

硕士生

Rank: 6Rank: 6

金币
722
好评
106
贡献
3

考神MT论坛帅哥MT论坛活跃会员MT论坛最佳新人

发表于 2019-7-2 13:09:07 来自手机  | 显示全部楼层
自古沙发归楼主
回复

使用道具 举报

18

主题

951

帖子

2497

积分

大学生

两个笑靥

Rank: 5Rank: 5

金币
283
好评
13
贡献
1

考神MT论坛帅哥MT论坛最佳新人MT论坛活跃会员

QQ
发表于 2019-7-2 13:55:24 来自手机  | 显示全部楼层
感谢分享,有个椅子也不错
回复

使用道具 举报

42

主题

763

帖子

1758

积分

高中生

Rank: 4

金币
35
好评
3
贡献
1

考神

QQ
发表于 2019-7-2 15:25:58 来自手机  | 显示全部楼层
感谢楼主分享
回复

使用道具 举报

244

主题

1万

帖子

2万

积分

版主

一个水怪

Rank: 7Rank: 7Rank: 7

金币
9203
好评
130
贡献
2

MT论坛灌水老大MT论坛最佳新人2019-5.1节快乐考神MT论坛侠客MT论坛活跃会员

发表于 2019-7-2 16:31:43 来自手机  | 显示全部楼层
awm
回复

使用道具 举报

7

主题

718

帖子

2385

积分

大学生

Rank: 5Rank: 5

金币
385
好评
3
贡献
0
发表于 2019-7-2 17:44:01 来自手机  | 显示全部楼层
感谢夏糜分享
回复

使用道具 举报

9

主题

696

帖子

1657

积分

高中生

Rank: 4

金币
354
好评
1
贡献
0
QQ
发表于 2019-7-2 17:56:05 来自手机  | 显示全部楼层
感谢分享
回复

使用道具 举报

20

主题

4546

帖子

1万

积分

博士生

Rank: 7Rank: 7Rank: 7

金币
3690
好评
33
贡献
0

考神

发表于 2019-7-2 18:03:07 来自手机  | 显示全部楼层
学习一下
回复

使用道具 举报

92

主题

1313

帖子

6405

积分

硕士生

Rank: 6Rank: 6

金币
722
好评
106
贡献
3

考神MT论坛帅哥MT论坛活跃会员MT论坛最佳新人

发表于 2019-7-2 18:50:22 来自手机  | 显示全部楼层
尼斯湖水怪 发表于 2019-7-2 16:31
awm

这都被你发现了
回复

使用道具 举报

0

主题

8

帖子

13

积分

幼儿园

Rank: 1

金币
5
好评
0
贡献
0
发表于 2019-7-16 08:28:00 来自手机  | 显示全部楼层
学习一下
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表