圆角矩形精度条(代码片段)

recol recol     2023-01-09     239

关键词:

public class DownProgressBar extends View 
  /**
     * 注意:
     * 1,整个精度条的宽度 MaxProgress;
     * 2,当前精度条的宽度 currentProgress;
     * 4,背景颜色
     * 5,进度颜色
     * 6,文字,文字颜色,大小
     *
     * @param context
     */
private int mMaxProgress;
    private int mProgress;
    private int mBackgroundColor;
    private int mProgressColor;
    private String mProgressText;
    private int mProgressTextColor;
    private int mProgressTextSize;
    private Paint mBackgroundPaint;
    private Paint mProgressPaint;
    private Paint mProgressTextPaint;
    private static final int DEFAULT_MAX_PROGRESS = 100
private static final int DEFAULT_PROGRESS = 0;
    private static final int DEFAULT_BACKGROUND_COLOR = ParseStringColor("#000000");
    private static final int DEFAULT_PROGRESS_COLOR = ParseStringColor("#6FCADF");
    private static final int DEFAULT_PROGRESS_TEXT_COLOR = ParseStringColor("#000000");
    private static final int DEFAULT_PROGRESS_TEXT_SIZE = 10;
    private static final float DEFAULT_STORK_WIDTH = 5f;
    private static final String TAG = DownProgressBar.class.getSimpleName();
 public DownProgressBar(Context context) 
        this(context, null, 0);
    

    public DownProgressBar(Context context, @Nullable AttributeSet attrs) 
        this(context, attrs, 0);
    

public DownProgressBar(Context context, @Nullable AttributeSet attrs, int defStyleAttr) 
        super(context, attrs, defStyleAttr);

        TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.DownProgressBar);
        mMaxProgress = a.getInt(R.styleable.DownProgressBar_down_progress_bar_max, DEFAULT_MAX_PROGRESS);
        mProgress = a.getInt(R.styleable.DownProgressBar_down_progress_bar_cur, DEFAULT_PROGRESS);
        mBackgroundColor = a.getColor(R.styleable.DownProgressBar_down_progress_bar_background_color, DEFAULT_BACKGROUND_COLOR);

        mProgressColor = a.getColor(R.styleable.DownProgressBar_down_progress_bar_progress_color, DEFAULT_PROGRESS_COLOR);
        mProgressText = a.getString(R.styleable.DownProgressBar_down_progress_bar_text);
        mProgressTextColor = a.getColor(R.styleable.DownProgressBar_down_progress_bar_text_color, DEFAULT_PROGRESS_TEXT_COLOR);
        mProgressTextSize = a.getDimensionPixelSize(R.styleable.DownProgressBar_down_progress_bar_text_size, DEFAULT_PROGRESS_TEXT_SIZE);
        a.recycle();
        initView();
    
 private void initView() 
        mBackgroundPaint = new Paint();
        mBackgroundPaint.setStrokeWidth(DEFAULT_STORK_WIDTH);
        mBackgroundPaint.setColor(mBackgroundColor);
        mBackgroundPaint.setStyle(Paint.Style.FILL);
        mBackgroundPaint.setAntiAlias(true);
        mProgressPaint = new Paint();
        mProgressPaint.setStrokeWidth(DEFAULT_STORK_WIDTH);
        mProgressPaint.setAntiAlias(true);
        mProgressPaint.setStyle(Paint.Style.FILL);
        mProgressPaint.setColor(mProgressColor);
        mProgressTextPaint = new Paint();
        mProgressTextPaint.setStrokeWidth(DEFAULT_STORK_WIDTH);
        mProgressTextPaint.setAntiAlias(true);
        mProgressTextPaint.setStyle(Paint.Style.FILL);
        mProgressTextPaint.setColor(mProgressTextColor);
        mProgressTextPaint.setTextSize(mProgressTextSize);
        mProgressTextPaint.setTextAlign(Paint.Align.CENTER);

    

  @Override
    protected void onDraw(Canvas canvas) 
        super.onDraw(canvas);
        int cWidth = canvas.getWidth();
        int cHeight = canvas.getHeight();
        //画背景图形,圆角的
        //mBackgroundPaint
        RectF backGroundRectf = new RectF(0, 0, cWidth, cHeight);
        float Ry = cHeight / 2;
        float Rx = cHeight / 2;
        canvas.drawRoundRect(backGroundRectf, Rx, Ry, mBackgroundPaint);
        int progress = (int) ((mProgress * 1.0 / mMaxProgress) * cWidth);
        LogUtils.LOGE(TAG, "downLoadProgress   >>>>>>>>" + progress);
        //刚开始的时候
         if (progress > 0) 
            if (progress < cWidth - (cHeight / 2)) 
                RectF rectF = new RectF(0, 0, cHeight, cHeight);
                if (180 - (progress * 5) > 90) 
                    canvas.drawArc(rectF, 180 - (progress * 5), 2 * (progress * 5), false, mProgressPaint);
                 else 
                    canvas.drawArc(rectF, 90, 180, true, mProgressPaint);
                    RectF progressRectf = new RectF(cHeight / 2, 0, progress, cHeight);
                    canvas.drawRect(progressRectf, mProgressPaint);
                 
           else if (progress >= cWidth - (cHeight / 2)) 
                RectF rectF = new RectF(0, 0, cHeight, cHeight);
                canvas.drawArc(rectF, 90, 180, true, mProgressPaint);
                RectF progressRectf = new RectF(cHeight / 2, 0, cWidth - (cHeight / 2), cHeight);
                canvas.drawRect(progressRectf, mProgressPaint);

                if (progress < cWidth) 
                    int rightPro = cWidth - progress;
                    RectF rectFr = new RectF(cWidth - cHeight, 0, cWidth, cHeight);
                    Log.d("gxl", "rightPro   >>>>" + rightPro);
                    canvas.drawArc(rectFr, 270, 180, false, mProgressPaint);
                    canvas.drawArc(rectFr, 360 - (rightPro * 5), 2 * (rightPro * 5), false, mBackgroundPaint);
                  else 
                    RectF rectFr = new RectF(cWidth - cHeight, 0, cWidth, cHeight);
                    canvas.drawArc(rectFr, 270, 180, false, mProgressPaint);
                

            
        
        //文字
        canvas.drawText(mProgressText, cWidth / 2, (cHeight + mProgressTextSize - DEFAULT_STORK_WIDTH) / 2, mProgressTextPaint);


    
  private static int ParseStringColor(String colorStr) 
        return Color.parseColor(colorStr);
    
 /**
     * 设置最大进度
     *
     * @param mMaxProgress
     */
    public void setmMaxProgress(int mMaxProgress) 
        this.mMaxProgress = mMaxProgress;
    
 /**
     * 设置当前的进度
     *
     * @param mProgress
     */
    public void setmProgress(int mProgress) 
        this.mProgress = mProgress;
        invalidate();
    
 /**
     * 设置当前文本
     *
     * @param mProgressText
     */
    public void setmProgressText(String mProgressText) 
        this.mProgressText = mProgressText;
        invalidate();
    
 public String getmProgressText() 
        return mProgressText;
    

public void setmProgressTextColor(int mProgressTextColor) 
        this.mProgressTextColor = mProgressTextColor;
        mProgressTextPaint.setColor(mProgressTextColor);
        invalidate();
    

 public void setmBackgroundColor(int mBackgroundColor) 
        this.mBackgroundColor = mBackgroundColor;
        mBackgroundPaint.setColor(mBackgroundColor);
        invalidate();
    






attrs文件内容

<!-- /**
* 注意:
* 1,整个精度条的宽度 MaxProgress;
* 2,当前精度条的宽度 currentProgress;
* 4,背景颜色
* 5,进度颜色
* 6,文字,文字颜色,大小
*
* @param context
*/-->

<declare-styleable name="DownProgressBar">
<attr name="down_progress_bar_max" format="integer"></attr>
<attr name="down_progress_bar_cur" format="integer"></attr>
<attr name="down_progress_bar_background_color" format="color"></attr>
<attr name="down_progress_bar_progress_color" format="color"></attr>

<attr name="down_progress_bar_text" format="string"></attr>

<attr name="down_progress_bar_text_color" format="color"></attr>
<attr name="down_progress_bar_text_size" format="dimension"></attr>
</declare-styleable>

 

 





















canva绘制圆角矩形(代码片段)

在做组态的时候,需要支持矩形圆角格式,但是因为canvas本身不带有圆角矩形,需要自行算出坐标进行绘制方案一、统一圆角<!DOCTYPEhtml><html><head><metacharset="utf-8"><title>canvas制作圆角矩形(包括填充矩形的功... 查看详情

opencv-绘制圆角矩形(代码片段)

功能函数//绘制圆角矩形voidDrawRotatedRectChamfer(cv::Matmask,constcv::RotatedRectrotatedrect,floatradius,constcv::Scalar&color,intthickness,intlineType) //创建画布 cv::Matcanvas=cv::Mat::zeros(mask.size(), 查看详情

actionscript3画圆角矩形(代码片段)

查看详情

canvas绘制圆形图片绘制圆角矩形图片?(代码片段)

...在Canvas中我们常常遇到的一个需求绘制一个圆形或者一个圆角矩形图像,常用于展示用户头像,我们知道CSS有border-radius属性,但是Canvas是没有的~?? 很尴尬,我们就来瞅瞅怎么整出一个圆形头像~Part.1 效果圆形头像 圆... 查看详情

以编程方式绘制圆角矩形[重复](代码片段)

...oreGraphics/Quartz2D?我想以编程方式为我覆盖的UIView绘制一个圆角矩形,我该怎么做?答案NSBezierPath有一个特殊的+bezierPathWithRoundedRect:xRadius:yRadius:,请查看文档。NSBezierPath*path=[NSBezierPathbezierPathWithRoundedRect:NSMakeRect(...)xRadius:3.0fyRadius:... 查看详情

macosx下实现矩形部分圆角(代码片段)

...标本文今天要讨论的是:在MacOSX下,如何实现矩形的部分圆角。比如这样:或者这样:解决方案要想实现上图样式,有两种解决方案。方案1:蠢萌描点法蠢萌描点法实现图2的原理图如下:如上图所示,首先确定整个矩形的的几个... 查看详情

simpleroundedimage-不使用mask实现圆角矩形图片(代码片段)

...什么我们要做的就是在CPU中将图片的矩形顶点数据修改成圆角矩形的顶点信息,之后Unity会将修改后的顶点数据发到GPU中,并设置对应的shader,GPU就会根据我们发送的顶点数据将图片渲染成我们所要的圆角矩形图片。3.怎么做由... 查看详情

actionscript3绘制圆角矩形,您可以在其中定义每个角(代码片段)

查看详情

compose自定义条形进度条(代码片段)

...=modifier.clip(RoundedCornerShape(cornerRadius))//裁剪矩形区域为圆角矩形,将超出圆角矩形的部分绘制去掉.drawWithContentdrawContent()//先绘制内容后绘制自定义图形,这样我们绘 查看详情

canvas踩坑记录(代码片段)

...和文字的canvas。要求将一张矩形的图片,放置进去显示为圆角矩形的图片  解决方案,先把图片处理成圆角矩形的样子,再放进去就可以了  绘制圆角矩形图片的解决方案<imgsrc="http://pics.sc.chinaz.com/files/pic/pic9/201505/apic11973... 查看详情

Python - 枕头圆角矩形不起作用

】Python-枕头圆角矩形不起作用【英文标题】:Python-Pillowroundedrectanglenotworking【发布时间】:2021-08-0302:18:03【问题描述】:我尝试为我的DiscordBot创建排名卡。但是经验条不会正确舍入。我不知道该怎么办。这是我的代码:defdraw(se... 查看详情

canvas文字自动换行圆角矩形画法生成图片手机长按保存(代码片段)

canvas的文字自动换行函数封装//str:要绘制的字符串//canvas:canvas对象//initX:绘制字符串起始x坐标//initY:绘制字符串起始y坐标//lineHeight:字行高,自己定义个值即可functioncanvasTextAutoLine(str,canvas,initX,initY,lineHeight)varctx=canvas.getContext("2d") 查看详情

元素圆角与内部滚动条的矛盾(代码片段)

文章目录概述元素圆角与滚动条方案一方案二方案实现自定义滚动条扩展遗留问题概述我们在写web页面的时候,除了页面原生的滚动条,比如HTML的滚动条,BODY的滚动条之外,还有一种比较常见的滚动条,那就... 查看详情

java示例代码_在圆角矩形中平滑角落,摆动

java示例代码_在圆角矩形中平滑角落,摆动 查看详情

android圆角图片(代码片段)

Android圆角图片相比较于iOS实现圆角图片,Android的方式还是复杂些???参考HowtomakeanImageViewwithroundedcorners?1.绘制圆角矩形,在绘制bitmap,通过设置setXfermode为SRC_IN来实现setXfermode相关解释可参考HenCoderAndroid开发进阶:自定义... 查看详情

如何快速绘制简单的圆角矩形(圆角)

】如何快速绘制简单的圆角矩形(圆角)【英文标题】:Howtodrawasimpleroundedrectinswift(roundedcorners)【发布时间】:2015-05-2108:47:03【问题描述】:我设法画了一个矩形:-)但我不知道如何画一个圆角矩形。有人可以帮我用下面的代码如... 查看详情

快速创建一个只有两个圆角的矩形?

】快速创建一个只有两个圆角的矩形?【英文标题】:Createarectanglewithjusttworoundedcornersinswift?【发布时间】:2015-06-1913:21:24【问题描述】:我需要快速创建一个只有两个圆角的矩形(ObjectiveC代码也可以)。目前我的代码正在使用... 查看详情

android标准glide加载圆形图和圆角矩形图(代码片段)

引入:implementation'com.github.bumptech.glide:glide:4.9.0'annotationProcessor'com.github.bumptech.glide:compiler:4.9.0' <?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"an... 查看详情