弧形進度條,用到PorterDuffXfermode
UI設計師的審美觀特別的好,做的UI也很好看。
先看設計圖要求
分析:
漸變可以做,文字也都沒什麼問題,但是圓環外邊的小突起怎麼做?用畫小漸變矩形?沒有進度的灰色帶邊框的漸變圓弧怎麼做?
太難了,最終選擇的是用圖片來做
圖片如下,只上傳了上圓環
圖:bgBitmap圖:shadeBitmap圖:混合模式
關鍵點就是PorterDuffXfermode 圖層混合模式 PorterDuff.Mode.DST_OUT
原理:在畫布最底層繪製bgBitmap,然後用shadeBitmap和一個圓弧疊加後的圖層遮蓋bgBitmap,就可以了。由於使用DST_OUT後圓弧和shadeBitmap重疊的部分,shadeBitmap就不會顯示(透明的),bgBitmap就顯示部分了。
下面就是程式碼了:
Xfermodem Xfermode = new PorterDuffXfermode(PorterDuff.Mode.DST_OUT);
@Override
protected void onDraw(Canvas canvas) {
canvas.drawBitmap(bgBitmap, null, bgRect, mPaint1); 先繪製背景bgBitmap,使用shadeBitmap來遮蓋背景bgBitmap
//繪製文字,沒什麼好說的
canvas.drawText("0", srcRect.left-mBound.width(), srcRect.top+srcRect.height()/2+mBound.height()/2, textPaint);
canvas.drawText("15", srcRect.left-mBound.width(), srcRect.top-10, textPaint);
canvas.drawText("30", srcRect.left+srcRect.width()/2-mBound.width()/2, srcRect.top-mBound.height(), textPaint);
canvas.drawText("45", srcRect.left+srcRect.width(), srcRect.top, textPaint);
canvas.drawText("60", srcRect.left+srcRect.width()+mBound.width(), srcRect.top+srcRect.height()/2+mBound.height()/2, textPaint);
canvas.drawText("KW", UnitX-unitBound.width()/2, UnitY+unitBound.height()/2, unitPaint);
if(angle>=178){return;}
//將繪製操作儲存到新的圖層,因為影象合成是很昂貴的操作,將用到硬體加速,這裡將影象合成的處理放到離屏快取中進行
int saveCount = canvas.saveLayer(dstRect, mPaint, Canvas.ALL_SAVE_FLAG);
//繪製目標圖
canvas.drawBitmap(shadeBitmap, null, dstRect, mPaint1);
//設定混合模式
mPaint.setXfermode(mXfermode);
//繪製源圖,也就是圓弧
canvas.drawArc(srcRect, 179, angle, false, mPaint);
//清除混合模式
mPaint.setXfermode(null);
//還原畫布
canvas.restoreToCount(saveCount);
//上面的做法就是 把shadeBitmap和一個圓弧在一個圖層中進行疊加,圓弧掃過的部分shadeBitmap就不會顯示,然後把這個圖層覆蓋到canvas上,也就是bgBitmap上面,shadeBitmap不顯示的部分,
}
那麼怎麼控制進度呢?當然是控制angle啦,進度0-180
這是生成繪畫矩形的程式碼
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
int width = w>h?w:h;
int centerX = width/2;
int centerY = width/2;
int quarterWidth = width /4;
srcRect = new RectF(centerX-quarterWidth+25, centerY-quarterWidth+25, centerX+quarterWidth-25, centerY+quarterWidth-25);
dstRect = new RectF(centerX-quarterWidth, centerY-quarterWidth, centerX+quarterWidth, centerY+quarterWidth);
bgRect = new RectF(centerX-quarterWidth, centerY-quarterWidth, centerX+quarterWidth, centerY+quarterWidth);
UnitX = centerX;
UnitY = centerY;
}
初始化畫筆的時候要設定mPaint1.setAntiAlias(true);mPaint1.setFilterBitmap(true);這樣畫出來的圖形邊緣就不會有齒了。
畫圓弧的畫筆要設定為空心mPaint.setStyle(Paint.Style.STROKE);
最終效果圖:
附:在深圳做Android開發,第2個月,以前沒做過Android開發,如有不足之處,請指出
相關推薦
弧形進度條,用到PorterDuffXfermode
UI設計師的審美觀特別的好,做的UI也很好看。 先看設計圖要求 分析: 漸變可以做,文字也都沒什麼問題,但是圓環外邊的小突起怎麼做?用畫小漸變矩形?沒有進度的灰色帶邊框的漸變圓弧怎麼做? 太難了,最終選擇的是用圖片來做 圖片如下,只上傳了上圓環 圖:
用 Python 給程序加個進度條,讓你的看起來更炫酷?
image 進度條 hub 一行 ref 當前 標準輸出 alt 操作 對於開發或者運維來說,使用 Python 去完成一些跑批任務,或者做一些監控事件是非常正常的情況。那麽如何有效地監控任務的進度?除了在任務中加上 Log 外,還能不能有另一種方式來了解任務進展到哪一步了
Python實現下載界面(帶進度條,斷點續傳,多線程多任務下載等)
Python 下載界面 tkinter 斷點續傳 進度條 開發環境: Windows 7 64位,Python 3.6.2 實現功能: 進度條,下載速度和下載進度的顯示,斷點續傳(暫停繼續下載功能),取消下載等功能下載界面,如圖所示點擊‘新建任務‘,彈出輸入下載鏈接的窗口,如圖所示點擊‘開
原生JS編寫了個簡易進度條,還請各位前輩指教~
classname 學習 UNC TP .com 開始學習 com get 能說 剛開始學習JS不久,以及第一次來到博客園,第一次進行分享博文。。。 噢,不對,不能說是分享,而是學習請教,請前輩多多指教,各個方面都可以~ 感謝您的路過~ <!DOC
#Python繪制 文本進度條,帶刷新、時間暫緩的
截取 字符串 alt 自動換行 分享 進行 style 進度 文本 #Python繪制 文本進度條,帶刷新、時間暫緩的 #文本進度條 import time as T st=T.perf_counter() print(‘-‘*6,‘執行開始‘,‘-‘*6)
Android 對話方塊總結(確定取消,單選,多選,進度條,具體的進度條)
/** * 彈出確定取消對話方塊 * * @param view */ public void click01(View view) { // 工廠設計模式,得到建立對話方塊的工廠 AlertDialog
C#自定義進度條,可用於音樂播放器進度調整,音量調整等功能
平時在做c#專案時偶爾會碰到要使用進度條的情況,但c#自帶的進度條外觀往往不合我們心意,這就需要我們自己動手來只做一款自己的進度條。先上圖: 外觀雖然簡單,但感覺比c#自帶的好看多了。 繪製這樣一個進度條需要兩個基本控制元件,兩個La
在Linux下使用makefile寫一個進度條,以及對\r 和\n,緩衝區的簡單瞭解
1.’\r’和‘\n’的區別 \r:表示回車:它只會回到這一行的最前邊 \n:表示回車換行。它會回到這一行的最前邊,然後跳到下一行 。 2.緩衝區 c函式如printf(),在輸出時,shell預設將資料輸出到標準輸出如顯示器,而printf()在
(shell練習2)zenity圖形介面之進度條,滑動塊,輸入、警告、錯誤、顯示對話方塊
1,程式執行進度條(這個比較好玩,有時候需要檢視某個操作的進度,可以使用這種方法) #!/bin/bash #1,自建進度條 #進度條內上要顯示的內容 ( echo "50"; sleep 1 tar -zcvf aaa.tar.gz practice/*; sleep 1 echo "1
Android 常用效果(各種進度條,酷炫loading動畫,火箭升空,撒花以及趨勢圖)
最近時間比較充裕一些,總結了下幾個專案用到的ui效果,在這邊共享給大家,也給自己做個記錄(後面會有demo貼出). 主要是以下幾種ui效果: 進度條多種展示 開源loading動畫 火箭升空 撒花
android自定義的弧形進度條和圓形進度條-SemicircleProgress
SemicircleProgress 兩個自定義圓形和弧形進度條 第一個SemicircleProgress可以對中間和下面的字自定義 第二個CircularProgressar可
android自定義圓形進度條,實現動態畫圓效果
自定義圓形進度條效果圖如下:應用場景如動態顯示分數等。 view的自定義屬性如下attr.xml <?xml version="1.0" encoding="UTF-8"?> <resources> <declare-style
unity3d製作弧形血條,魔條
第一步,我們需要先準備好一張弧形素材圖片資源: 第二步,把該資源在unity中按照如下設定: 第三步,在unity中建立一個image,並且把資源拖給該image,就變為如下所示 需要注意點選一下set native size,圖片才會顯示真實大小 第四步,給該圖片新增一
Android使用okhttp封裝多檔案批量下載 (帶進度條,取消下載)
在網上搜索了很多關於okhttp封裝的網路框架,唯獨沒找到完美實現了多個檔案批量下載的案例,當前使用的最多的也就是okhttp了,所以,我學習了各位大神的封裝後,自己也試著封裝了一個關於okhttp的網路請求框架,方便專案中的使用。 實現的功能基本如下:
jq外掛做圓形進度條,相容ie7、ie8
1、外掛名字jQuery-Knob-master 下載地址https://github.com/aterrien/jQuery-Knob 2、常用引數說明: <script> $(function(){
Vue專案解決element元件環形進度條,超過100%時,不渲染問題。
問題描述:使用element元件的環形進度條時,給出的屬性只有一個引數, 要求只能填寫1-100的數,當我們的數值超過100時,想要把環形渲染滿,但問題出來了,700以上的數值時,圖層就不渲染了,如下圖所示:  
頁面載入時,新增進度條,提高使用者體驗
這幾個月做了個專案,在此對一些問題做一個記錄。 專案是前後端分離的,前端用的 npm+webpack。 問題:由於系統某頁面資料量過大或網路較差等原因,導致頁面還未完全加載出來,但按鈕已被載入時(js還未就緒),點選按鈕會報錯。 根據系統情況,解決方案:每個頁面載入的時
WebView 載入資料時顯示進度條,載入完後再把進度條取消並顯示內容
轉載地址:http://blog.sina.com.cn/s/blog_7a66361301011a46.html webview 載入資料時顯示進度條有兩種. 第一種方法 這個是載入資料時顯示進度條 super.onCreate(savedInstanceState);
Python顯示進度條,實時顯示處理進度
前言 在大多數時候,我們的程式會一直進行迴圈處理。這時候,我們非常希望能夠知道程式的處理進度,由此來決定接下來該做些什麼。接下來告訴大家如何簡單又漂亮的實現這一功能。 如何使用這個類 使用這個類很簡單,只需要兩步即可完成,如下: process_ba
bootstrap 表格列格式為進度條,並從後臺獲取進度的資料
@ApiOperation(value = "獲取進度", notes = "獲取進度") @RequestMapping(value = "/getProcess", method = RequestMethod.GET) @ResponseBody public Map getP