Android Canvas練習(9)自已繪分割突出效果的餅圖(Pie Chart)
這裡畫了個餅圖的變種,具有分割突出效果的餅圖(Pie Chart),就是個切蛋糕效果的餅圖,畫這種圖,其技巧就在於圓心的偏移。
在圓心偏移,半徑不變的基礎上,效果就出來了。
上圖:
怎麼樣,效果還是有模有樣的吧。
程式碼很簡單,附上:
程式碼中只需注意下,指定要突出哪塊,就在哪塊上指定下偏移即可。package com.xcl.chart; /** * Canvas練習 * 自已繪分割突出效果的餅圖(Pie Chart) * * author:xiongchuanliang * date:2014-4-12 */ import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.RectF; import android.util.DisplayMetrics; import android.view.View; public class PanelPieChart2 extends View{ private int ScrWidth,ScrHeight; //演示用的百分比例,實際使用中,即為外部傳入的比例引數 private final float arrPer[] = new float[]{20f,30f,10f,40f}; //RGB顏色陣列 private final int arrColorRgb[][] = { {77, 83, 97}, {148, 159, 181}, {253, 180, 90}, {52, 194, 188}} ; //指定突出哪個塊 private final int offsetBlock = 2; public PanelPieChart2(Context context) { super(context); // TODO Auto-generated constructor stub //螢幕資訊 DisplayMetrics dm = getResources().getDisplayMetrics(); ScrHeight = dm.heightPixels; ScrWidth = dm.widthPixels; } public void onDraw(Canvas canvas){ //畫布背景 canvas.drawColor(Color.WHITE); float cirX = ScrWidth / 2; float cirY = ScrHeight / 3 ; float radius = ScrHeight / 5 ;//150; float arcLeft = cirX - radius; float arcTop = cirY - radius ; float arcRight = cirX + radius ; float arcBottom = cirY + radius ; RectF arcRF0 = new RectF(arcLeft ,arcTop,arcRight,arcBottom); //畫筆初始化 Paint PaintArc = new Paint(); Paint PaintLabel = new Paint(); PaintLabel.setColor(Color.WHITE); PaintLabel.setTextSize(16); //位置計算類 XChartCalc xcalc = new XChartCalc(); float Percentage = 0.0f; float CurrPer = 0.0f; int i= 0; for(i=0; i<arrPer.length; i++) { //將百分比轉換為餅圖顯示角度 Percentage = 360 * (arrPer[i]/ 100); Percentage = (float)(Math.round(Percentage *100))/100; //分配顏色 PaintArc.setARGB(255,arrColorRgb[i][0], arrColorRgb[i][1], arrColorRgb[i][2]); if( i == offsetBlock) //指定突出哪個塊 { //偏移圓心點位置 float newRadius = radius /10; //計算百分比標籤 xcalc.CalcArcEndPointXY(cirX, cirY, newRadius , CurrPer + Percentage/2); arcLeft = xcalc.getPosX() - radius; arcTop = xcalc.getPosY() - radius ; arcRight = xcalc.getPosX() + radius ; arcBottom = xcalc.getPosY() + radius ; RectF arcRF1 = new RectF(arcLeft ,arcTop,arcRight,arcBottom); //在餅圖中顯示所佔比例 canvas.drawArc(arcRF1, CurrPer, Percentage, true, PaintArc); //計算百分比標籤 xcalc.CalcArcEndPointXY(xcalc.getPosX(), xcalc.getPosY(), radius - radius/2/2, CurrPer + Percentage/2); //標識 canvas.drawText(Float.toString(arrPer[i])+"%",xcalc.getPosX(), xcalc.getPosY() ,PaintLabel); }else{ //在餅圖中顯示所佔比例 canvas.drawArc(arcRF0, CurrPer, Percentage, true, PaintArc); //計算百分比標籤 xcalc.CalcArcEndPointXY(cirX, cirY, radius - radius/2/2, CurrPer + Percentage/2); //標識 canvas.drawText(Float.toString(arrPer[i])+"%",xcalc.getPosX(), xcalc.getPosY() ,PaintLabel); } //下次的起始角度 CurrPer += Percentage; } } }
附上我其它繪製的圖連結:
Android Canvas練習(5)自已繪面積圖(Area Chart)MAIL: [email protected]
BLOG: http://blog.csdn.net/xcl168
相關推薦
Android Canvas練習(9)自已繪分割突出效果的餅圖(Pie Chart)
這裡畫了個餅圖的變種,具有分割突出效果的餅圖(Pie Chart),就是個切蛋糕效果的餅圖,畫這種圖,其技巧就在於圓心的偏移。 在圓心偏移,半徑不變的基礎上,效果就出來了。 上圖: 怎麼樣,效果還是有模有樣的吧。 程式碼很
Android Canvas練習(2)自已繪餅圖(Pie Chart)
上文弄了個繪製報表的,有了報表,當然想一併也繪個餅圖,柱形圖之類的玩玩,看看了API,覺得應當很簡單,餅圖實現了下, 實現程式碼確實也很簡單,Android的這些函式封裝的確實好用。 效果圖如下: 不過實現過程還是比較曲折的,首
Android Canvas練習(6)餅圖(Pie Chart)百分比標註位置計算技巧
今天終於解決了困擾整整一週的,一個令人抓狂的HPUX程式碼問題。可以在這半夜神清氣爽的說下昨天晚上推匯出來的一個小技巧, 如何在一張餅圖(Pie Chart)上每個扇形的中心位置標記出百分比。 我之前寫了一篇怎麼自繪餅圖的文章,但百分比都是另外在一個 地方顯示的,
Android Canvas練習(7)繪製歐冠八強防守&控制率資料對比圖
在網易資料酷的<<足壇"斧頭幫"!瘋狂馬競打爆巴薩>>中看到一幅圖,非常有特色,因為最近用Canvas繪了不少圖表,就想用程式碼把這幅圖也繪出來。 基本也繪出來了,效果圖如下: 繪製這張圖,api用得到不多,但恰好把我前面
DWR(AJAX)+Highcharts繪制曲線圖,餅圖
logging 數據類型 hid 一個 ext js xml 通過 for 源代碼下載 基本需求: 1. 在前臺會用DWR框架(或者AJAX)調用Java後臺代碼獲取要在Hightcharts展示的數據 2. 了解JSON(JavaScript
python 繪出分類效果的圖步驟
red com plt 輸入參數 src 查看 min mage 生成 先亮結果圖:(忽略中文顯示功能,請查看以前文章進行修改) cm_light = mpl.colors.ListedColormap([‘g‘, ‘r‘, ‘b‘]) 目的: 生成分類器模型的界
Android canvas繪制柱形統計圖
ext.get hit 選擇 etc new 工廠模式 imp 設計模式 layout 如今非常多應用都須要一些統計圖。眼下第三方的統計圖也有非常多。可是在自己看來僅僅要不是特別耽誤時間還是選擇用canvas自己繪制比較合理。依賴於第三方的繪制在需求上也
關於Android制作.9.png圖片
後綴名 -s 文字 path 使用 iss eas eight 關於 第一個問題,.9格式的圖片與我們之前的一般圖片有什麽問題呢? 這是安卓開發裏面的一種特殊的圖片。這樣的格式的圖片在android 環境下具有自適應調節大小的能力。 (1)同意開發者定義可擴展區
遞歸--練習9--noi8758 2的冪次方表示
efi fine -a ret problem 來源 n! cnblogs color 遞歸--練習9--noi8758 2的冪次方表示 一、心得 找準子問題就好 二、題目 8758:2的冪次方表示 總時間限制: 1000ms 內存限制: 65536kB描述 任何一個
android非硬件加速繪制簡單流程
left surface fff asa face cpp erp erer enter 這裏的硬件加速是指openGL + GPU 如果不適用硬件加速: 1 ViewRootImpl.java draw:if (!dirty.isEmpty() || mIsAnima
【社交分享SDK】ShareSDK for Android 2.5.9已經公布
地址 nload trac p s unity3 share 2.x con clas ShareSDK for Android 2.5.9已經公布 版本號:V2.5.9 2015-3-19 1、升級Dropbox對API接口的調用。包含授權、
Android 學習筆記--9妹圖片+代碼混淆+打包
文件名 打包 andro span apk 使用 背景透明 學習筆記 tro 一、Android Studio 創建.9文件 註:找一張背景透明的png圖片,將文件名改成 " xxxx.9.png " 然後放到drawable文件中,雙擊 註:有一種
Android仿華為天氣繪制刻度盤
near 使用 list cal 有助於 sch and bre 們的 效果圖 能夠看到這個自己定義控件結合了顏色漸變、動態繪制刻度、動態水球效果。接下來我們就來看看這個效果是怎樣一步一步實現的。 開始自己定義控件 和非常多自己定義控件方式
條件、循環、函數定義、字符串操作練習9-14
cnblogs print input star 白雲 set form format for 用循環畫五角星 >>> import turtle >>> for i in range(5): turtle.forward(100)
練習9(第九章習題)
als 設置 rgs 調試 test ack col on() sim package cn.ch.w; public class TestSimpleCircle { private double radius; // 構造方法,有參構造 p
關於Android Studio中點9圖的編譯錯誤問題
mbo 但是 留言 清晰 文件中 pan 不能 use 計算 Android中的點9圖想必大家都非常熟悉了,能夠指定背景圖片的縮放區域和文本內容的顯示區域,常見如QQ聊天界面的背景氣泡這種文本內容不固定並需要適配的應用場景。 這裏也給大家準備了一張圖,詳細介紹了一下“A
Canvas繪制股票K線圖
mat restore screen 位置 mar toc rect() store water 最近想在小程序做股票K線圖,於是嘗試用Canvas實現股票K線圖。K線圖用到Canvas的API其實只有劃線和畫矩形,即moveTo(),lineTo(),fillRect()
【轉】Android性能優化-過度繪制解決方案
裏的 watermark == ++ 深度 getc 像素 多次 但是 轉載請註明出處:http://blog.csdn.net/a740169405/article/details/53896497 過度繪制: 屏幕上某一像素點在一幀中被重復繪制多次,就是過度繪制。
基礎練習-9.特殊回文數
編程 十進制 std amp data nbsp c++ a* tdi 問題描述 123321是一個非常特殊的數,它從左邊讀和從右邊讀是一樣的。 輸入一個正整數n, 編程求所有這樣的五位和六位十進制數,滿足各位數字之和等於n 。 輸入格式 輸入一行,包含一個正整數
第二階段:1.流程圖:9.excel繪制甘特圖
嚴格 http 十字架 mage 表示 流程圖 圖片 bubuko 狀況 後面的框都是日期 可以以一個月為周期計算或者周或者... 因為產品經理應該嚴格把控產品的時間 因此甘特圖特別有必要 註意:任務拆解的越細 把控度越強 然後對格式進行設置 註意時間下面可以