android自定義組件實(shí)現(xiàn)儀表計(jì)數(shù)盤(pán)
前幾天開(kāi)發(fā)公司項(xiàng)目,有個(gè)地方要做一個(gè)分?jǐn)?shù)的儀表盤(pán),根據(jù)分?jǐn)?shù)跑分,(設(shè)計(jì)的人估計(jì)是看到招商銀行App的賬號(hào)總覽)
網(wǎng)上好像找不到類(lèi)似的組件,那就只能自己開(kāi)發(fā)啦。趁著空余時(shí)間,把組件進(jìn)行了一些改進(jìn),并封裝成依賴(lài)庫(kù),分享給大家
效果展示
一款顏色,文字弧度大小,儀表角度都可以自定義的組件





項(xiàng)目集成:MeterView
項(xiàng)目目錄——>build.gradle
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
app——>build.gradle
dependencies {
...
implementation 'com.github.pimaryschoolstudent:MeterView:1.0.1'
}
組件使用
//添加數(shù)據(jù)
var arrayList:ArrayList<String> = ArrayList()
arrayList.add("0")
arrayList.add("10")
arrayList.add("20")
arrayList.add("30")
arrayList.add("40")
arrayList.add("50")
arrayList.add("較差")
arrayList.add("中等")
arrayList.add("良好")
arrayList.add("優(yōu)秀")
arrayList.add("100")
meter.setScaleArray(arrayList)
//設(shè)置數(shù)據(jù)
//顏色
meter.getDataManager().ScaleTextColor = Color.BLUE //底盤(pán)弧刻度文字顏色
meter.getDataManager().DashBoardColor = Color.BLUE //底盤(pán)弧度顏色
meter.getDataManager().PointColor = Color.RED //分?jǐn)?shù)點(diǎn)顏色
meter.getDataManager().SourceTextColor = Color.RED //分?jǐn)?shù)顏色
meter.getDataManager().SourceCurveColor = Color.RED //分?jǐn)?shù)弧顏色
meter.getDataManager().CheckScaleTextColor = Color.BLACK //選中分?jǐn)?shù)刻度顏色
//大小 dp2px(dp轉(zhuǎn)px) px2dp(px轉(zhuǎn)dp)
meter.getDataManager().CheckScaleTextSize = meter.dp2Px(15f) //選中分?jǐn)?shù)刻度文字大小
meter.getDataManager().ScaleTextSize = meter.dp2Px(10f) //刻度文字大小
meter.getDataManager().SourceTextSize = meter.dp2Px(40f) //分?jǐn)?shù)文字大小
meter.getDataManager().PointSize = meter.dp2Px(5f) //分?jǐn)?shù)點(diǎn)半徑大小
meter.getDataManager().SourceCurveSize = meter.dp2Px(10f) //分?jǐn)?shù)弧寬度大小
meter.getDataManager().BoardCurveSize = meter.dp2Px(5f) //底盤(pán)弧寬度大小
meter.getDataManager().SourceTextInterval = meter.dp2Px(20.5f) //分?jǐn)?shù)離頂部的間隔大小
//其他設(shè)置
meter.getDataManager().Rate = 30 //分?jǐn)?shù)弧動(dòng)畫(huà)速率(30/s)
meter.getDataManager().ShowSource = true //是否顯示分?jǐn)?shù)
meter.getDataManager().SourceTextAlign = MeterView.SOURCE_CENTER //分?jǐn)?shù)居中方式 SOURCE_CENTER(底盤(pán)居中) OURCE_START(底盤(pán)頂部) SOURCE_END (底盤(pán)底部)
//meter.getDataManager().startAngle = -180f //底盤(pán)弧開(kāi)始點(diǎn)的角度(起點(diǎn)為組件最右邊點(diǎn),當(dāng)?shù)扔?90時(shí)為組件中點(diǎn))
//meter.getDataManager().sweepAngle = 180f //底盤(pán)弧角度大小
meter.getDataManager().sourceShowType = MeterView.SOURCE_NUMBER //顯示的分?jǐn)?shù)類(lèi)型 SOURCE_NUMBER:數(shù)字(百分制) SOURCE_SCALETEXT:刻度文字
meter.getDataManager().meterDebug = false //打開(kāi)底部矩形,方便調(diào)試和添加其他元素
//跑分
tv.text = "runSource(45)......"
meter.runSource(45) //根據(jù)分?jǐn)?shù)跑分(百分制,大于100則等于100)
//meter.runIndex(5) //根據(jù)數(shù)據(jù)索引跑分 (不為-1,不大于數(shù)據(jù)大?。?
//meter.addIndex(2) //在當(dāng)前基礎(chǔ)上增加兩個(gè)索引的分?jǐn)?shù)
//meter.subtractIndex(1) //在當(dāng)前基礎(chǔ)上減少一個(gè)索引的分?jǐn)?shù)
//meter.addSource(20)//在當(dāng)前基礎(chǔ)上增加20分
//meter.subtractSource(20)//在當(dāng)前基礎(chǔ)上減少20分
thread { //支持異步線(xiàn)程直接調(diào)用
Thread.sleep(4000)
meter.addIndex(3)
runOnUiThread(Runnable { tv.text = "addIndex(3)......" })
Thread.sleep(4000)
meter.subtractIndex(1)
runOnUiThread(Runnable { tv.text = "subtractIndex(1)......" })
Thread.sleep(4000)
meter.addSource(20)
runOnUiThread(Runnable { tv.text = "addSource(20)......" })
Thread.sleep(4000)
meter.subtractSource(20)
runOnUiThread(Runnable { tv.text = "subtractSource(20)......" })
Thread.sleep(4000)
meter.runIndex(10)
runOnUiThread(Runnable { tv.text = "runIndex(10)......" })
}
//分?jǐn)?shù)改變監(jiān)聽(tīng)器
meter.setSourceChangeListener(object :MeterView.SourceChangeListener{
override fun CheckScaleTextChange(currentText: String) { //選中刻度文字改變
Log.e("currentScaleText"," currentScaleText $currentText")
}
override fun SourceChange(source: Int,currentScaleText:String) { //分?jǐn)?shù)改變
Log.e("meter","source $source currentScaleText $currentScaleText")
}
})
xml屬性
app:DashBoardColor="#1C65CE" //底盤(pán)弧度顏色 app:ScaleTextColor="#888585" //底盤(pán)弧刻度文字顏色 app:SourceCurveColor="#09C0E5" //分?jǐn)?shù)弧顏色 app:CheckScaleTextColor="#000" //選中分?jǐn)?shù)刻度顏色 app:PointColor="#09C0E5" //分?jǐn)?shù)點(diǎn)顏色 app:SourceTextColor="#000" //分?jǐn)?shù)顏色 app:CheckScaleTextSize="18dp" //選中分?jǐn)?shù)刻度文字大小 app:SourceTextSize="30dp" //分?jǐn)?shù)文字大小 app:ScaleTextSize="14dp" //刻度文字大小 app:BoardCurveSize="2dp" //底盤(pán)弧寬度大小 app:SourceCurveSize="10dp" //分?jǐn)?shù)弧寬度大小 app:PointSize="8dp" //分?jǐn)?shù)點(diǎn)半徑大小 app:ScaleTextInterval="0dp" //刻度離頂部的間隔大小 app:SourceTextInterval="0dp" //分?jǐn)?shù)離頂部的間隔大小 app:SourceTextAlign="start" //分?jǐn)?shù)居中方式 center(底盤(pán)居中)start(底盤(pán)頂部)end (底盤(pán)底部) app:SourceShowType="number" //顯示的分?jǐn)?shù)類(lèi)型 number:數(shù)字(百分制) scaleText:刻度文字 app:Rate="20" //分?jǐn)?shù)弧動(dòng)畫(huà)速率(20/s) app:StartAnglee="-180" //底盤(pán)弧開(kāi)始點(diǎn)的角度(起點(diǎn)為組件最右邊點(diǎn),當(dāng)?shù)扔?90時(shí)為組件中點(diǎn)) app:SweepAnglee="320" //底盤(pán)弧角度大小 app:ShowSource="true" //是否顯示分?jǐn)?shù),同下 app:ShowScaleText="true" app:ShowCheckScaleText="true" app:ShowPoint="true" app:ShowSourceCurve="true"
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Android應(yīng)用程序四大組件之使用AIDL如何實(shí)現(xiàn)跨進(jìn)程調(diào)用Service
- Android的Service應(yīng)用程序組件基本編寫(xiě)方法
- Android開(kāi)發(fā)中Button組件的使用
- Android Jetpack架構(gòu)組件 ViewModel詳解
- Android ListView UI組件使用說(shuō)明
- Android中butterknife的使用與自動(dòng)化查找組件插件詳解
- Android開(kāi)發(fā)之組件GridView簡(jiǎn)單使用方法示例
- Android列表組件ListView使用詳解之動(dòng)態(tài)加載或修改列表數(shù)據(jù)
- Android四大組件之Service詳解
- Android框架組件Lifecycle的使用詳解
- Android UI新組件學(xué)習(xí)和使用
- 詳解Android的四大應(yīng)用程序組件
相關(guān)文章
在A(yíng)ndroid中使用SQLite數(shù)據(jù)庫(kù)及其操作詳解
在?Android?開(kāi)發(fā)中,使用?SQLite?數(shù)據(jù)庫(kù)是一種常見(jiàn)的持久化數(shù)據(jù)存儲(chǔ)方式,本文將通過(guò)代碼示例詳細(xì)講解如何在?Android?中創(chuàng)建數(shù)據(jù)庫(kù)表、插入數(shù)據(jù)、執(zhí)行查詢(xún)操作以及驗(yàn)證查詢(xún)結(jié)果,需要的朋友可以參考下2024-08-08
Kotlin中關(guān)于內(nèi)聯(lián)函數(shù)的一些理解分享
這篇文章主要給大家介紹了關(guān)于Kotlin中內(nèi)聯(lián)函數(shù)的一些理解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-07-07
Android組件Activity的啟動(dòng)過(guò)程深入分析
這篇文章主要介紹了Android組件Activity的啟動(dòng)過(guò)程,Activity作為Android四大組件之一,他的啟動(dòng)沒(méi)有那么簡(jiǎn)單。這里涉及到了系統(tǒng)服務(wù)進(jìn)程,啟動(dòng)過(guò)程細(xì)節(jié)很多,這里我只展示主體流程。activity的啟動(dòng)流程隨著版本的更替,代碼細(xì)節(jié)一直在進(jìn)行更改,每次都會(huì)有很大的修改2023-04-04
anroid開(kāi)發(fā)教程之spinner下拉列表的使用示例
這篇文章主要介紹了anroid的spinner下拉列表的使用示例,需要的朋友可以參考下2014-04-04
Android使用表格布局設(shè)計(jì)注冊(cè)界面
這篇文章主要為大家詳細(xì)介紹了Android使用表格布局設(shè)計(jì)注冊(cè)界面,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-05-05
Android9.0 靜默安裝源碼的實(shí)現(xiàn)
這篇文章主要介紹了Android9.0 靜默安裝源碼的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01

