前幾天看到貝塞爾曲線的時(shí)候窜醉,想想用貝塞爾做些什么東西出來(lái)。很快一個(gè)電量顯示的控件就馬上登場(chǎng)了象缀,先來(lái)看下效果圖吧:
充電中
不在充電情況下媒佣,電量大于20%
不在充電情況下谴仙,并且電量在20%之下
充電情況下,并且電量充滿了
充電中揩局,規(guī)定波浪從右到左滾動(dòng)(后補(bǔ))
看到效果圖基本就這幾種狀態(tài)了掀虎,這幾種狀態(tài)里面首先分了兩大類(lèi):充電中凌盯,未充電中;充電中又細(xì)分了充電到100%和未達(dá)到100%兩種涩盾;未充電中又細(xì)分了電量低中和電量不在低中的兩種十气。
原本想的是錄個(gè)視頻來(lái)模擬充電和未充電兩種情況的,后來(lái)生成的gif一直是大于簡(jiǎn)書(shū)上傳的要求春霍,因此這里就上傳多個(gè)gif了(為了演示幾種情況砸西,代碼中狀態(tài)是寫(xiě)死的,因此大家看到的狀態(tài)欄和控件顯示的不一樣)。demo我都通過(guò)動(dòng)態(tài)數(shù)據(jù)獲取電量測(cè)試過(guò)了芹枷。
使用
- 屬性部分:
屬性名 | 類(lèi)型 | 描述 |
---|---|---|
ring_stroke_width | dimension | 外圈的寬度 |
ring_radius | dimension | 外圈的半徑 |
wave_width | dimension | 一個(gè)波浪的寬度 |
wave_peek | dimension | 波浪的峰值 |
wave_cycle_time | integer | 波浪走動(dòng)的速度 |
wave_color | color | 波浪的顏色 |
battery_status_color | color | 充電狀態(tài)文字顏色 |
battery_status_size | dimension | 充電狀態(tài)文字大小 |
battery_level_color | color | 充電百分比文字顏色 |
battery_level_size | dimension | 充電百分比文字大小 |
battery_status_size | dimension | 充電文字狀態(tài)顏色 |
battery_lowpower_color | color | 低電量下的文字閃動(dòng)的顏色 |
battery_charging_text | string或reference | 正在充電的文字 |
battery_fill_text | string或reference | 充滿的文字 |
battery_using_text | string或reference | 正在使用的文字 |
battery_lowpower_text | string或reference | 低電量的文字 |
battery_lowpower_percnet | fraction | 百分之多少時(shí)才顯示低電量 |
charging_direction | enum | 充電的時(shí)候波浪滾動(dòng)的方向 |
- 布局部分:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#12b3c9"
android:gravity="center"
android:orientation="vertical">
<com.library.battery.BatteryView
android:id="@+id/batteryView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:battery_lowpower_color="#d96d15"
app:battery_lowpower_percnet="10%"
app:ring_radius="@dimen/ring_radius"
app:ring_stroke_width="@dimen/ring_stroke_width"
app:wave_color="#3acf38"
app:wave_cycle_time="1000"
app:wave_peek="@dimen/wave_peek"
app:wave_width="@dimen/wave_width" />
</LinearLayout>
布局中用到的屬性不是全的衅疙,就拿了幾個(gè)試試。想要看更多的屬性自己添加吧鸳慈。效果圖如下:
- 代碼部分:
public class MainActivity extends AppCompatActivity {
BatteryView batteryView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
batteryView = (BatteryView) findViewById(R.id.batteryView);
batteryView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
batteryView.getViewTreeObserver().removeGlobalOnLayoutListener(this);
IntentFilter filter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
registerReceiver(new BatteryReceiver(), filter);
}
});
}
public void setBattery(BatteryStatus status) {
Log.d("TAG", "status:" + status.status + ",level:" +status.level);
batteryView.setChanges(status.status, status.level);
}
}
切記:這里調(diào)用BatteryView的setChange方法必須要在layout都加載完才能調(diào)用該方法饱溢。
關(guān)于我:
email:a1002326270@163.com
github:enter