【移動應用開發(fā)技術】Android自定義View實現(xiàn)圓形加載進度條效果的方法_第1頁
【移動應用開發(fā)技術】Android自定義View實現(xiàn)圓形加載進度條效果的方法_第2頁
【移動應用開發(fā)技術】Android自定義View實現(xiàn)圓形加載進度條效果的方法_第3頁
免費預覽已結束,剩余1頁可下載查看

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

【移動應用開發(fā)技術】Android自定義View實現(xiàn)圓形加載進度條效果的方法

這篇文章將為大家詳細講解有關Android自定義View實現(xiàn)圓形加載進度條效果的方法,在下覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。View仿華為圓形加載進度條效果圖實現(xiàn)思路可以看出該View可分為三個部分來實現(xiàn)最外圍的圓,該部分需要區(qū)分進度圓和底部的刻度圓,進度部分的刻度需要和底色刻度區(qū)分開來中間顯示的文字進度,需要讓文字在View中居中顯示旋轉的小圓點,小圓點需要模擬小球下落運動時的加速度效果,開始下落的時候慢,到最底部時最快,上來時速度再逐漸減慢具體實現(xiàn)先具體細分講解,博客最后面給出全部源碼(1)首先為View創(chuàng)建自定義的xml屬性在工程的values目錄下新建attrs.xml文件各個屬性的作用:indexColor:進度圓的顏色baseColor:刻度圓底色dotColor:小圓點顏色textSize:文字大小textColor:文字顏色(2)新建CircleLoadingView類繼承View類,重寫它的三個構造方法,獲取用戶設置的屬性,同時指定默認值我們從View繪制的第一步開始(3)測量onMeasure,首先需要測量出View的寬和高,并指定View在wrap_content時的最小范圍,對于View繪制流程還不熟悉的同學,可以先去了解下具體的繪制流程淺談AndroidView繪制三大流程探索及常見問題重寫onMeasure方法,其中我們要考慮當View的寬高被指定為wrap_content時的情況,如果我們不對wrap_content的情況進行處理,那么當使用者指定View的寬高為wrap_content時將無法正常顯示出ViewMeasureSpec的狀態(tài)分為三種EXACTLY、AT_MOST、UNSPECIFIED,這里只要單獨指定非精確值EXACTLY之外的情況就好了。本文中使用到的DensityUtil類,是為了將dp轉換為px來使用,以便適配不同的屏幕顯示效果(4)重寫onDraw,繪制需要顯示的內(nèi)容因為做的是單純的View而不是ViewGroup,內(nèi)部沒有子控件需要確定位置,所以可直接跳過onLayout方法,直接開始對View進行繪制分為三個部分繪制,繪制刻度圓,繪制文字值,繪制旋轉小圓點繪制刻度圓先畫一個小豎線,通過canvas.rotate()方法每次旋轉3.6度(總共360度,用100/360=3.6)得到一個刻度為100的圓,然后通過progress參數(shù),得到要顯示的進度數(shù),并把小于progress的刻度變成進度圓的顏色繪制中間文字文字繪制的坐標是以文字的左下角開始繪制的,所以需要先通過把文字裝載到一個矩形Rect,通過畫筆的getTextBounds方法取得字符串的長度和寬度,通過動態(tài)計算,來使文字居中顯示繪制旋轉小圓點這個小圓點就是簡單的繪制一個填充的圓形就好讓它自己動起來可以通過兩種方式,一種是開一個線程,在線程中改變mDotProgress的數(shù)值,并通過postInvalidate方法跨線程刷新View的顯示效果開線程的方式不推薦使用,這是沒必要的開銷,而且線程不好控制,要實現(xiàn)讓小圓點在運行過程中開始和結束時慢,運動到中間時加快這種效果不好實現(xiàn),所以最好的方式是使用屬性動畫,需要讓小圓點動起來時,調(diào)用以下方法就好了在屬性動畫中可以通過setInterpolator方法指定不同的插值器,這里要模擬小球掉下來的重力效果,所以需要使用AccelerateDecelerateInterpolator插值類,該類的效果就是在動畫開始時和結束時變慢,中間加快(5)設置當前進度值對外提供一個方法,用來更新當前圓的進度通過外部調(diào)用setProgress方法就可以跟更新當前圓的進度了源碼在的onDraw方法中需要避免頻繁的new對象,所以把一些如初始化畫筆Paint的方法放到了最前面的構造方法中進行。在分多個模塊繪制時,應該使用canvas.save()和canvas.restore()的組合,來避免不同模塊繪制時的相互干擾,在這兩個方法中繪制相當于PS中的圖層概念,上一個圖層進行的修改不會影響到下一個圖層的顯示效果。在需要顯示動畫效果的地方使用屬性動畫來處理,可自定義的效果強,在系統(tǒng)提供的插值器類不夠用的情況下,我么還可通過繼承Animation類,重寫它的applyTransformation方法來處理各種

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論