博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android 自定义图片圆形进度条
阅读量:4320 次
发布时间:2019-06-06

本文共 4162 字,大约阅读时间需要 13 分钟。

  感觉话一个圆形进度条挺简单的 ,但是却偏偏给了几张图片让你话,说实话我没接触过,感觉好难,还好百度有大把的资源,一番努力下终于画出来了。 代码如下。

 

 

package com.etong.cpms.widget;

import java.net.Proxy.Type;
import com.etong.cpms.activity.R;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.Align;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffXfermode;
import android.graphics.Rect;
import android.graphics.RectF;
import android.graphics.Paint.FontMetricsInt;
import android.graphics.Typeface;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
/**
 *
 */
public class MyView extends View {
    private Bitmap bmpBg;
    private Bitmap bmpForbg;
    private Bitmap bmpDb;
    private Bitmap bmpNq;
    private PorterDuffXfermode mMode;
    private Paint mXferPaint;
    private RectF mOval;
    private int mPercent;
    private Paint paint;
    private Rect targetRect;
    private FontMetricsInt fontMetrics;
    /**
     *
     *
     * @param context
     */
    public MyView(Context context) {
        super(context);
    }
    int widthPixels;
    int heightPixels;
    int centerX;
    int centerY;
    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        super.onSizeChanged(w, h, oldw, oldh);
        widthPixels = w;
        heightPixels = h;
        centerX = widthPixels / 2;
        centerY = heightPixels / 2;
    }
    public MyView(Context context, AttributeSet attrs) {
        super(context, attrs);
        setFocusable(true);
        // setFocusableInTouchMode(true);
        bmpBg = (Bitmap) BitmapFactory.decodeResource(getResources(),
                R.drawable.wq);
        bmpForbg = (Bitmap) BitmapFactory.decodeResource(getResources(),
                R.drawable.mdwq);
        bmpDb = (Bitmap) BitmapFactory.decodeResource(getResources(),
                R.drawable.db);
        bmpNq = (Bitmap) BitmapFactory.decodeResource(getResources(), R.drawable.nq);
        mMode = new PorterDuffXfermode(PorterDuff.Mode.SRC_IN);//锟斤拷锟斤拷
        mXferPaint = new Paint();
        mXferPaint.setXfermode(mMode);//锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷图片锟洁交时模式
        mOval = new RectF();
        mOval.left = 0;
        mOval.top = 0;
        mPercent = 0;
        paint = new Paint();
        paint.setColor(Color.GREEN);
        paint.setTypeface(Typeface.DEFAULT_BOLD);
        paint.setTextSize(60);
        targetRect = new Rect(centerX - bmpBg.getWidth() / 2, centerY - bmpBg.getHeight() / 2, centerX + bmpBg.getWidth() / 2,
                centerY + bmpBg.getWidth() / 2);
        fontMetrics = paint.getFontMetricsInt();
    }
    /**
     *
     */
    @Override
    protected void onDraw(Canvas canvas) {
        mXferPaint.setXfermode(null);
        canvas.drawBitmap(bmpBg, centerX - bmpBg.getWidth() / 2, centerY - bmpBg.getHeight() / 2, mXferPaint);
        int saveCount = canvas.saveLayer(centerX - bmpBg.getWidth() / 2, centerY - bmpBg.getHeight() / 2,centerX + bmpBg.getWidth() / 2,
                centerY + bmpBg.getWidth() / 2, null, Canvas.MATRIX_SAVE_FLAG
                        | Canvas.CLIP_SAVE_FLAG
                        | Canvas.HAS_ALPHA_LAYER_SAVE_FLAG
                        | Canvas.FULL_COLOR_LAYER_SAVE_FLAG
                        | Canvas.CLIP_TO_LAYER_SAVE_FLAG);
//        mOval.left = 100;
//        mOval.top = 100;
//        mOval.right = 100 + bmpBg.getWidth();
//        mOval.bottom = 100 + bmpBg.getHeight();
        mOval.left = centerX - bmpBg.getWidth() / 2;
        mOval.top = centerY - bmpBg.getHeight() / 2;
        mOval.right = centerX + bmpBg.getWidth() / 2;
        mOval.bottom = centerY + bmpBg.getWidth() / 2;
        mXferPaint.setXfermode(null);
        canvas.drawArc(mOval, -90, 360 * mPercent / 100, true, mXferPaint);
        mXferPaint.setXfermode(mMode);
//        canvas.drawBitmap(bmpForbg, 100, 100, mXferPaint);
        canvas.drawBitmap(bmpForbg, centerX - bmpForbg.getWidth() / 2, centerY - bmpForbg.getHeight() / 2, mXferPaint);
        canvas.restoreToCount(saveCount);
        int baseline = targetRect.top
                + (targetRect.bottom - targetRect.top - fontMetrics.bottom + fontMetrics.top)
                / 2 - fontMetrics.top;
        //
        paint.setTextAlign(Align.CENTER);
        paint.setTextAlign(Align.CENTER);
        canvas.drawBitmap(bmpNq, centerX - bmpNq.getWidth() / 2, centerY - bmpNq.getHeight() / 2, paint);
        canvas.drawText(mPercent + "%", centerX, centerY+80, paint);
        canvas.drawBitmap(bmpDb, centerX - bmpDb.getWidth() / 2, centerY - bmpDb.getHeight() / 2-50, paint);
    }
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        mPercent++;
        mPercent %= 100;
        //
        invalidate();
        // postInvalidate();
        return true;
    }
}

转载于:https://www.cnblogs.com/zhousen34/p/5150489.html

你可能感兴趣的文章
四叶草(css)
查看>>
nginx——前端服务环境
查看>>
vue+element-ui 字体自适应不同屏幕
查看>>
Vue 循环为选中的li列表添加效果
查看>>
vue创建脚手架 cil
查看>>
ArcGIS分支版本化( Branch Versioning )技术介绍
查看>>
scrapy过滤重复数据和增量爬取
查看>>
scrapy-redis源码浅析
查看>>
tupian
查看>>
selenium定位非select下拉框的元素 ,定位不到
查看>>
用elasticsearch分析中国大学省份分布
查看>>
elasticsearch 常用查询 + 删除索引
查看>>
sops的配置过程
查看>>
prometheus+grafana监控Linux和kubernetes的例子
查看>>
kubernetes 简单 hello world nginx svc deployment
查看>>
kubenetes 的svc从ClusterPort 改为NodePort
查看>>
kube-metric在kubernetes上的部署
查看>>
kubespray 修改配置
查看>>
部署kubernetes-prometheus和用kubespray部署kubernetes后修改kubelet的
查看>>
Hbase和Hadoop的内存参数调优 + 前端控制台
查看>>