Android 倒計(jì)時(shí)控件 CountDownView的實(shí)例代碼詳解
一個(gè)精簡可自定義的倒計(jì)時(shí)控件,使用 Canvas.drawArc() 繪制。實(shí)現(xiàn)了應(yīng)用開屏頁的圓環(huán)掃過的進(jìn)度條效果。
代碼見https://github.com/hanjx-dut/CountDownView
使用
allprojects { repositories { ... maven { url ’https://jitpack.io’ } }}dependencies { implementation ’com.github.hanjx-dut:CountDownView:1.1’}
實(shí)現(xiàn)的效果
效果圖
對(duì)應(yīng)的view:
<com.hanjx.ui.CountDownView android: android:layout_width='wrap_content' android:layout_height='wrap_content' android:layout_gravity='center_horizontal' app:auto_start='true' app:text_mode='time_variant' app:duration='3000' app:paint_stroke='3dp'/> <com.hanjx.ui.CountDownView android: android:layout_width='wrap_content' android:layout_height='wrap_content' android:layout_gravity='center_horizontal' app:finished_color='#000000' app:auto_start='true' app:start_angle='90' app:text_mode='time_variant' app:duration='3000' app:paint_stroke='3dp'/> <com.hanjx.ui.CountDownView android: android:layout_width='wrap_content' android:layout_height='wrap_content' android:layout_gravity='center_horizontal' app:finished_color='#FF0000' app:unfinished_color='#00FF00' app:auto_start='true' app:duration='2000' app:refresh_interval='quick' app:text='跳過' app:text_size='12sp' app:text_color='#FF0000' app:text_mode='fixed' app:paint_stroke='2dp'/> <com.hanjx.ui.CountDownView android: android:layout_width='wrap_content' android:layout_height='wrap_content' android:layout_gravity='center_horizontal' app:auto_start='true' app:text_mode='fixed' app:clockwise='false' app:text='' app:duration='2000' app:paint_stroke='3dp'/> <com.hanjx.ui.CountDownView android: android:layout_width='wrap_content' android:layout_height='wrap_content' android:layout_gravity='center_horizontal' app:text_mode='time_variant' app:duration='5000' app:paint_stroke='1.5dp'/>
全部屬性:
<declare-styleable name='CountDownView'> <attr name='duration' format='integer'/> <!-- 總時(shí)間 --> <attr name='refresh_interval'> <!-- 刷新間隔 ms --> <enum name='normal' value='16'/> <enum name='quick' value='11'/> <enum name='slow' value='20'/> </attr> <attr name='paint_stroke' format='dimension'/> <!-- 圓環(huán)寬度 --> <attr name='finished_color' format='color'/> <!-- 掃過完成的顏色 --> <attr name='unfinished_color' format='color'/> <!-- 未完成的顏色 --> <attr name='start_angle' format='float'/> <!-- 起始角度 默認(rèn) -90 即頂部 --> <attr name='clockwise' format='boolean'/> <!-- 順時(shí)針 默認(rèn) true --> <attr name='auto_start' format='boolean'/> <!-- 自動(dòng)開始 默認(rèn) false --> <!-- 文字 --> <attr name='text' format='string'/> <!-- 設(shè)置文字 --> <attr name='text_mode'> <!-- 文字模式 固定 / 隨時(shí)間倒數(shù)(默認(rèn))--> <enum name='fixed' value='0'/> <enum name='time_variant' value='1'/> </attr> <attr name='text_size' format='dimension'/> <!-- 文字尺寸 --> <attr name='text_color' format='color'/> <!-- 文字顏色 --> </declare-styleable>
文字部分沒有提供更多的自定義屬性,可以通過 setTextDrawer()對(duì)畫筆和文字進(jìn)行自定義,如 demo 中的第五個(gè):
CountDownView countDownView = findViewById(R.id.count_down_5);countDownView.setTextDrawer(new CountDownView.TextDrawer() { @Override public void setTextPaint(Paint paint, long leftTime, int textMode) { if (leftTime < 2000) { paint.setTextSize(SizeUtils.sp2px(12)); } paint.setTypeface(Typeface.DEFAULT_BOLD); paint.setColor(0xFFFF802E); } @Override public String getText(long leftTime, int mode, String originText) { if (leftTime < 2000) { return '跳過'; } return String.format('%ss', leftTime == 0 ? leftTime : leftTime / 1000 + 1); }});
監(jiān)聽
countDownView.setCountDownListener(new CountDownView.CountDownListener() { @Override public void onTick(long leftTime, float finishedAngle) { // leftTime: 剩余時(shí)間, finishedAngle: 掃過的角度 } @Override public void onStop(boolean reset) { // 主動(dòng)調(diào)用 countDownView.stop() 時(shí)會(huì)觸發(fā)此回調(diào) } @Override public void onFinished() { }});
ps:接口都有默認(rèn)實(shí)現(xiàn),可以選擇實(shí)現(xiàn)任意方法
總結(jié)
到此這篇關(guān)于Android 倒計(jì)時(shí)控件 CountDownView的實(shí)例代碼詳解的文章就介紹到這了,更多相關(guān)Android 倒計(jì)時(shí)控件 CountDownView內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!
相關(guān)文章:
1. ASP刪除img標(biāo)簽的style屬性只保留src的正則函數(shù)2. jsp+servlet簡單實(shí)現(xiàn)上傳文件功能(保存目錄改進(jìn))3. PHP循環(huán)與分支知識(shí)點(diǎn)梳理4. HTML 絕對(duì)路徑與相對(duì)路徑概念詳細(xì)5. ASP實(shí)現(xiàn)加法驗(yàn)證碼6. ASP基礎(chǔ)入門第二篇(ASP基礎(chǔ)知識(shí))7. PHP session反序列化漏洞超詳細(xì)講解8. ASP基礎(chǔ)知識(shí)Command對(duì)象講解9. CSS可以做的幾個(gè)令你嘆為觀止的實(shí)例分享10. Spring注入Date類型的三種方法總結(jié)
