1. 程式人生 > >Android實現形形色色的進度條 很簡單的實現

Android實現形形色色的進度條 很簡單的實現

原文地址:http://blog.csdn.net/lmj623565791/article/details/43371299

1、概述

最近需要用進度條,秉著不重複造輪子的原則,上github上搜索了一番,看了幾個覺得比較好看的ProgressBar,比如:daimajia的等。簡單看了下程式碼,基本都是繼承自View,徹徹底底的自定義了一個進度條。盯著那絢麗滾動條,忽然覺得,為什麼要通過View去寫一個滾動條,系統已經提供了ProgressBar以及屬於它的特性,我們沒必要重新去構建一個,但是系統的又比較醜,不同版本變現還不一定一樣。那麼得出我們的目標:改變系統ProgressBar的樣子。 

  對沒錯,我們沒有必要去從0打造一個ProgressBar,人家雖然長的不好看,但是特性以及穩定性還是剛剛的,我們只需要為其整下容就ok了。 

說到整容,大家都知道我們的控制元件是通過onDraw()畫出來的,那麼我們只需要去覆蓋它的onDraw()方法,自己寫下就ok 。 

對了,我建立了一個微信公眾號,歡迎關注,左邊欄目上掃一掃即可。

  接下來,我們貼下效果圖:

2、效果圖

1、橫向的進度條

2、圓形的進度條


沒錯,這就是我們的進度條效果,橫向的模仿了daimajia的進度條樣子。不過我們繼承子ProgressBar,簡單的為其整個容,程式碼清晰易懂 。為什麼說,易懂呢?

橫向那個進度條,大家會drawLine()和drawText()吧,那麼通過getWidth()拿到控制元件的寬度,再通過getProgress()拿到進度,按比例控制繪製線的長短,字的位置還不是分分鐘的事。

3、實現

橫向的滾動條繪製肯定需要一些屬性,比如已/未到達進度的顏色、寬度,文字的顏色、大小等。 
本來呢,我是想通過系統ProgressBar的progressDrawable,從裡面提取一些屬性完成繪製需要的引數的。但是,最終呢,反而讓程式碼變得複雜。所以最終還是改用自定義屬性。 說道自定義屬性,大家應該已經不陌生了。

1、HorizontalProgressBarWithNumber

1、自定義屬性

values/attr_progress_bar.xml:

  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <resources>
  3.     <declare-styleablename="HorizontalProgressBarWithNumber">
  4.         <attrname="progress_unreached_color"format="color"/>
  5.         <attrname="progress_reached_color"format="color"/>
  6.         <attrname="progress_reached_bar_height"format="dimension"/>
  7.         <attrname="progress_unreached_bar_height"format="dimension"/>
  8.         <attrname="progress_text_size"format="dimension"/>
  9.         <attrname="progress_text_color"format="color"/>
  10.         <attrname="progress_text_offset"format="dimension"/>
  11.         <attrname="progress_text_visibility"format="enum">
  12.             <enumname="visible"value="0"/>
  13.             <enumname="invisible"value="1"/>
  14.         </attr>
  15.     </declare-styleable>
  16.     <declare-styleablename="RoundProgressBarWidthNumber">
  17.         <attrname="radius"format="dimension"/>
  18.     </declare-styleable>
  19. </resources>

2、構造中獲取

  1. publicclass HorizontalProgressBarWithNumber extends ProgressBar  
  2. {  
  3.     privatestaticfinalint DEFAULT_TEXT_SIZE = 10;  
  4.     privatestaticfinalint DEFAULT_TEXT_COLOR = 0XFFFC00D1;  
  5.     privatestaticfinalint DEFAULT_COLOR_UNREACHED_COLOR = 0xFFd3d6da;  
  6.     privatestaticfinalint DEFAULT_HEIGHT_REACHED_PROGRESS_BAR = 2;  
  7.     privatestaticfinalint DEFAULT_HEIGHT_UNREACHED_PROGRESS_BAR = 2;  
  8.     privatestaticfinalint DEFAULT_SIZE_TEXT_OFFSET = 10;  
  9.     /** 
  10.      * painter of all drawing things 
  11.      */
  12.     protected Paint mPaint = new Paint();  
  13.     /** 
  14.      * color of progress number 
  15.      */
  16.     protectedint mTextColor = DEFAULT_TEXT_COLOR;  
  17.     /** 
  18.      * size of text (sp) 
  19.      */
  20.     protectedint mTextSize = sp2px(DEFAULT_TEXT_SIZE);  
  21.     /** 
  22.      * offset of draw progress 
  23.      */
  24.     protectedint mTextOffset = dp2px(DEFAULT_SIZE_TEXT_OFFSET);  
  25.     /** 
  26.      * height of reached progress bar 
  27.      */
  28.     protectedint mReachedProgressBarHeight = dp2px(DEFAULT_HEIGHT_REACHED_PROGRESS_BAR);  
  29.     /** 
  30.      * color of reached bar 
  31.      */
  32.     protectedint mReachedBarColor = DEFAULT_TEXT_COLOR;  
  33.     /** 
  34.      * color of unreached bar 
  35.      */
  36.     protectedint mUnReachedBarColor = DEFAULT_COLOR_UNREACHED_COLOR;  
  37.     /** 
  38.      * height of unreached progress bar 
  39.      */
  40.     protectedint mUnReachedProgressBarHeight = dp2px(DEFAULT_HEIGHT_UNREACHED_PROGRESS_BAR);  
  41.     /** 
  42.      * view width except padding 
  43.      */
  44.     protectedint mRealWidth;  
  45.     protectedboolean mIfDrawText = true;  
  46.     protectedstaticfinalint VISIBLE = 0;  
  47.     public HorizontalProgressBarWithNumber(Context context, AttributeSet attrs)  
  48.     {  
  49.         this(context, attrs, 0);  
  50.     }  
  51.     public HorizontalProgressBarWithNumber(Context context, AttributeSet attrs,  
  52.             int defStyle)  
  53.     {  
  54. 相關推薦

    Android實現形形色色進度 簡單實現

    原文地址:http://blog.csdn.net/lmj623565791/article/details/43371299 1、概述 最近需要用進度條,秉著不重複造輪子的原則,上github上搜索了一番,看了幾個覺得比較好看的ProgressBar

    android 圓形進度簡單實現

    在網上看了些進度條效果,於是就想寫關於這方面部落格,先看下今天要實現一些進度條的效果圖: 當然要實現這些效果是基於你對canvas類繪製一些圖形是瞭解的,否則估計也不好看懂,我儘量講的詳細點, 先從簡單的畫圓開始一步步把這個效果實現出來,這樣幾乎每個人都能看的懂, 畫圓的

    Android學習之路------自定義控制元件,圓形進度簡單實現

    簡單介紹 主要是通過自定義一個view類,然後通過操作canvas和paint進行效果的實現 Step 1 新建一個attr.xml,這裡主要是為了自定義我們的控制元件屬性,attr開頭的語句表示控制元件的自定義屬性,在這裡為了實現圓形進度條,定義了一

    android簡單的方式實現旋轉進度

    <span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">先看效果圖:</span> 要達到這樣的效果,很簡單

    android實現進度的檔案上傳

    MainActivity.java package com.example.upload; import android.app.Activity; import android.os.Bundle; import android.view.Menu; import a

    Android自定義View——從零開始實現圓形進度

    前言:以前老是用別人造的輪子,知其然不知其所以然,有時看懂了別人寫的過多幾個月又忘了,遂來開個坑把一步步實現和思路寫下來,弄成一個系列。由於上班時間不多,爭取一週擼個一到兩篇出來 本篇只著重於思路和實現步驟,裡面用到的一些知識原理不會非常細地拿來講,如

    Android檔案下載進度實現

    package com.pocketdigi.download;    import java.io.FileOutputStream;    import java.io.IOException;    import java.io.InputStream;    import java.net.URL; 

    Android實現下載進度圖示效果

    我們在開發中 有時候會遇到 點選一個圖示然後進行下載 並且需要在圖示上面加上進度條 像下面這樣的效果 先說下這個效果的實現,首先我們使用自定義view,在onDraw()方法中使用畫筆畫出外面的進度條 mPaint.setAnti

    Android 自定義進度ColorfulProgressBar,原理簡單、效果

    Android-ColorfulProgressBar 簡介: 這是一個自定義的Progressbar,效果看著還行吧,滾動的雙色斜條作為進度條,有點類似Bootstrap風格。原生Progress的基本操作都有,自行觀摩我的原始碼吧,挺簡單的。

    Android 自定義View實現圓形進度 深入理解onDraw和onMeasure及自定義屬性

    Android的View類是使用者介面的基礎構件,表示螢幕上的一塊矩形區域,負責這個區域的繪製和事件處理。自定義View的過程主要包括重寫onDraw及onMeasure方法 , 其中onMeasure方法的作用就是計算出自定義View的寬度和高度。這個計算的過

    使用canvas實現環形進度

    cti anim 效果 math png utf-8 context request var html代碼: 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta

    用shell實現一個進度

    clas index nbsp blog str 進度條 進度 while lee #!/bin/bash i=0 str=‘#‘ ch=(‘|‘ ‘\‘ ‘-‘ ‘/‘) index=0 while [ $i -le 25 ] do printf "[%-25s][%

    Vue 實現loading進度

    lean pll es2017 images mas height mage 沒有 圖片加載 項目中遇到的,用vue實現下: 1 <template> 2 <div class="plLoading"> 3 <d

    Ajax實現進度的文件上傳

    actor show 運行 sleep ack sage encoding ttr img Ajax實現帶進度條的文件上傳 文件上傳頁面運行效果 上傳文件並顯示進度條運行效果 代碼如下; DiskFileItemFactory factory =

    Python 實現下載進度(不帶GUI界面)

    Python requests 進度條 話不多說,先上圖該Python代碼可以實現獲取下載的文件名,下載文件的大小,下載速度等。 代碼關鍵點: 1、關於下載文件名的獲取:代碼裏使用兩種方式獲取:(1) 通過Content-Disposition屬性,該屬性是作為對下載文件的一個標識字段,存儲著下載

    27.QT-QProgressBar動態實現多彩進度(詳解)

    ID public lin 就是 def nim qslider etl #define 如下圖所示: 效果如下: (gif錄制的動畫效果不好,所以顏色有間隙) 介紹 通過qss實現,只需要一個多彩背景圖,通過QImage獲取顏色,然後來設置進度條,便

    python 實現各種進度

    def bre init etime true ret sel object end 1. 時間進度條 class Tiao(object): def __init__(self): self.obj1 = datetime.timedelta(s

    Linux下實現彩色進度程式

    程式碼: #include <stdio.h> #include <unistd.h> #include <string.h> int main() { int i = 0; char bar[101]; const char *la

    Android app版本升級的一個簡單實現

    夢想會被現實磨滅,希望我能堅持的長久! 1升級原理 build.gradle 中 versionCode 1 , versionName “1.0.0” 是升級的關鍵,versionCode是個int,versionName是個String,其中versionCode每次要升級版

    Android原生繪圖進度+簡單自定義屬性程式碼生成器

    零、前言 1.感覺切拼字串是個很有意思的事,好的拼接方式可以自動生成一些很實用的東西 2.本文自定義控制元件並不是很高大上的東西,目的在於計錄自定義控制元件的書寫規範與行文流程 3.建議大家自定義控制元件時自定義屬性有自己專屬字首,有利無害,何樂不為 4.本文是根據鴻洋在慕課網上的教程敲的:詳見,自己