Android自定義控件橫向柱狀統(tǒng)計(jì)圖
本文實(shí)例為大家分享了Android實(shí)現(xiàn)橫向柱狀統(tǒng)計(jì)圖的具體代碼,供大家參考,具體內(nèi)容如下
碰到一個(gè)項(xiàng)目需要用到統(tǒng)計(jì)圖功能,比較簡單就自定義寫了一個(gè)。沒有寫過多的樣式和功能,僅有簡單的橫向柱狀統(tǒng)計(jì)圖。
傳入數(shù)據(jù)后大致樣式如下:
/**橫向柱狀統(tǒng)計(jì)圖 * Created by Administrator on 2018/1/16 0016. */ public class HorizontalChartView extends View { /** * 間隔線畫筆 */ private Paint paint; /** * 線的顏色 */ private int color_line = Color.rgb(230, 230, 230); /** * 字的顏色 */ private int color_font = Color.rgb(51, 51, 51); /** * 比例圖顏色 */ private int color_plan = Color.rgb(22, 85, 164); /** * 比例圖畫筆 */ private Paint paint_plan; /** * 比例圖高度 */ private int plan_height; /** * 初始化比例 */ private Float[] ratio = {0f, 0f, 0f, 0f, 0f, 0f, 0f, 0f, 0f, 0f, 0f, 0f}; /** * 文字畫筆1 */ private Paint paint_font; /** * 文字畫筆2 */ private Paint paint_font2; /** * 線的條數(shù) */ private int line_num = 11; /** * 比例數(shù) */ private String ratio_num = "0"; /** * 月份 */ private String month_num = "1月"; public HorizontalChartView(Context context) { super(context); } public HorizontalChartView(Context context, @Nullable AttributeSet attrs) { super(context, attrs); init(context, attrs); } public HorizontalChartView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(context, attrs); } @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) public HorizontalChartView(Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); init(context, attrs); } /** * 初始化 * * @param context * @param attrs */ public void init(Context context, AttributeSet attrs) { paint = new Paint(); paint.setColor(color_line); paint_plan = new Paint(); paint_plan.setColor(color_plan); paint_font = new Paint(); paint_font.setColor(color_font); paint_font.setTextSize(DensityUtils.dp2px(context, 12)); paint_font.setAntiAlias(true); paint_font.setTextAlign(Paint.Align.CENTER); paint_font2 = new Paint(); paint_font2.setColor(color_font); paint_font2.setTextSize(DensityUtils.dp2px(context, 12)); paint_font2.setAntiAlias(true); paint_font2.setTextAlign(Paint.Align.RIGHT); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); int width = getWidth(); int height = getHeight(); int lift_width = (int) (width * 0.15); int line_width = (int) (width * 0.78); //獲取底部文字信息 Paint.FontMetrics fm = paint_font.getFontMetrics(); int line_length = (int) (height - (fm.bottom - fm.top) - 4); plan_height = (int) (line_length / 12 * 0.3); for (int i = 0; i < line_num; i++) { canvas.save(); if (i == 0) { ratio_num = "0"; } else { ratio_num = i + "0"; } //底部百分比數(shù)字 canvas.drawText(ratio_num, lift_width + i * line_width / 10, height - 10, paint_font); //網(wǎng)絡(luò)線 canvas.drawLine(lift_width + i * line_width / 10, 0, lift_width + i * line_width / 10, line_length, paint); canvas.restore(); } //獲取月份文字信息 Paint.FontMetrics fm1 = paint_font2.getFontMetrics(); for (int n = 12; n > 0; n--) { canvas.save(); month_num = n + "月"; //左側(cè)月份 canvas.drawText(month_num, lift_width / 4 * 3, ((line_length / 12)) * (13 - n) - line_length / 24 + (fm1.bottom - fm1.top) / 2, paint_font2); //比例圖 canvas.drawRect(lift_width, line_length / 12 * (13 - n) - (line_length / 24 + plan_height / 2) + fm1.bottom, line_width * (ratio[n - 1] / 100) + lift_width, line_length / 12 * (13 - n) - (line_length / 24 + plan_height / 2) + plan_height + fm1.bottom, paint_plan); canvas.restore(); } } /** * 傳入比例信息 * * @param ratio */ public void setRatio(Float[] ratio) { this.ratio = ratio; } }
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Android自定義控件實(shí)現(xiàn)通用驗(yàn)證碼輸入框(二)
- Android自定義控件實(shí)現(xiàn)通用驗(yàn)證碼輸入框
- Android自定義控件之圓形進(jìn)度條動(dòng)畫
- Android自定義控件之水平圓點(diǎn)加載進(jìn)度條
- Android自定義控件之刻度尺控件
- Android Studio 創(chuàng)建自定義控件的方法
- Android開發(fā)自定義控件之折線圖實(shí)現(xiàn)方法詳解
- Android自定義控件實(shí)現(xiàn)時(shí)鐘效果
- Android自定義控件仿ios下拉回彈效果
- Android運(yùn)動(dòng)健康睡眠自定義控件的實(shí)現(xiàn)
相關(guān)文章
5種Android數(shù)據(jù)存儲(chǔ)方式匯總
這篇文章主要為大家整理了5種Android數(shù)據(jù)存儲(chǔ)方式,列出了各存儲(chǔ)方式的優(yōu)缺點(diǎn),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-12-12C#中利用正則表達(dá)式將人民幣金額轉(zhuǎn)換為大寫漢字
這篇文章主要介紹了C#中利用正則表達(dá)式將人民幣金額轉(zhuǎn)換為大寫漢字的方法,需要的朋友可以參考下2016-02-02Android 對(duì)話框 Dialog使用實(shí)例講解
對(duì)話框是在當(dāng)前的頁面之上彈出的小窗口, 用于顯示一些重要的提示信息, 提示用戶的輸入,確認(rèn)信息,或顯示某種狀態(tài).如 : 顯示進(jìn)度條對(duì)話框, 退出提示.接下來通過本文給大家介紹android dialog對(duì)話框知識(shí),感興趣的朋友一起看看吧2016-09-09Android實(shí)現(xiàn)仿今日頭條點(diǎn)贊動(dòng)畫效果實(shí)例
我想看到今日頭條的點(diǎn)贊效果,應(yīng)該都覺得很絢麗吧,下面這篇文章主要給大家介紹了關(guān)于Android實(shí)現(xiàn)仿今日頭條點(diǎn)贊動(dòng)畫效果的相關(guān)資料,文中通過示例代價(jià)介紹的非常詳細(xì),需要的朋友可以參考下2022-02-02android 使用uinput模擬輸入設(shè)備的方法
這篇文章主要介紹了android 使用uinput模擬輸入設(shè)備的方法,有需要的朋友可以參考一下2014-01-01