自定義圓圈ProgressBar

2021-10-07 17:49:57 字數 2604 閱讀 7127

最近專案需要整乙個清理記憶體的圓圈pro,要求中間還要帶個文字展示

樣式如下:

然而僅僅只是這樣乙個樣式怎麼能夠滿足乙個碼農的發散性思維

於是就有了下面的樣式

然後來看一下xml的使用

emm……

有點簡陋哈哈哈哈

好了重要的部分來了

上原始碼package com.hwj.gui.ui;

import android.content.context;

import android.content.res.typedarray;

import android.graphics.canvas;

import android.graphics.color;

import android.graphics.paint;

import android.graphics.rect;

import android.graphics.rectf;

import android.util.attributeset;

import android.view.view;

import android.widget.textview;

import androidx.annotation.nullable;

import com.hwj.gui.r;

/** * createby: mr.lee

* date: 2020/6/24_14:14

*/public class loadingprogressbar extends view

public loadingprogressbar(context context, @nullable attributeset attrs)

public loadingprogressbar(context context, @nullable attributeset attrs, int defstyleattr)

@override

protected void onmeasure(int widthmeasurespec, int heightmeasurespec) else

if (heightmode == measurespec.unspecified || heightmode == measurespec.at_most) else

setmeasureddimension((int) width, (int) height);

}public void setprogress(int progress)

public int getprogress()

@override

protected void ondraw(canvas canvas)

if (progress == 0)

return;

double sweepangle = 360d * progress / 100;

progresspaint.setcolor(progressbackground);

canvas.drawarc(progressrectf, 0, 360, false, progresspaint);

progresspaint.setcolor(progresscolor);

canvas.drawarc(progressrectf, 90, (float) sweepangle, false, progresspaint);

string str = progress + "%";

textpaint.gettextbounds(str, 0, str.length(), rect);

int w = rect.width(); //獲取寬度

int h = rect.height();//獲取高度

// 真實寬高

width = progressrectf.right - progressrectf.left;

height = progressrectf.bottom - progressrectf.top;

float startx = width - w < 0 ? 0f : width - w;

float starty = height + h > height * 2 ? height * 2 : width + h;

canvas.drawtext(str, (startx + getpaddingleft()) / 2f + progressrectf.left,

(starty + getpaddingtop()) / 2f + progressrectf.top, textpaint);}}

接下來就是attrs.xml了

<?xml version="1.0" encoding="utf-8"?>

打完收工

揍是這麼easy

留下以備不時之需,有需要可以拿去耍

自定義 如何自定義協議

何為自定義協議,其實是相對標準協議來說的,這裡主要針對的是應用層協議 常見的標準的應用層協議如http ftp smtp等,如果我們在網路通訊的過程中不去使用這些標準協議,那就需要自定義協議,比如我們常用的rpc框架 dubbo,thrift 分布式快取 redis,memcached 等都是自定義...

自定義控制項 自定義鐘錶

private context mcontext 畫筆 private paint mpaint 控制項的寬 private int mwidth x方向的圓心座標 private int center 鐘錶的半徑 private int mradio 圓環的寬 private int stroke...

Qt自定義控制項實現圓圈載入進度條

先看效果圖 思路 畫乙個佔270度的圓弧,然後定義乙個定時器,定時旋轉座標系,實現旋轉的效果。圓弧需要使用漸變色,實現顏色越來越淺的效果 關鍵 cmprocessbar1.cpp cmprocessbar1 cmprocessbar1 qwidget parent qwidget parent ui...