制作一個大風車加載條

一、前言

  不想使用普通的那種轉圈的加載條,所以找了一個大風車的圖片,想要用旋轉的大風車來表示加載中。
  一般都會想著將大風車圖片設置成ImageView組件,然后給這個組件添加一個旋轉動畫就可以了,但是我突然想到我是想寫加載條的,所以我打算用ProgressBar實現。

二、ProgressBar

1.介紹

  進度條組件,當我們在做一些耗時操作的時候(比如加載文件,下載等等),可以使用ProgressBar給用于提供一個進度提示。

2.查看ProgressBar的原形旋轉樣式

系統的ProgressBar的style:

style="?android:attr/progressBarStyle"
style="?android:attr/progressBarStyleHorizontal" //水平ProgressBar
style="?android:attr/progressBarStyleInverse"
style="?android:attr/progressBarStyleLarge" //圓形ProgressBar
style="?android:attr/progressBarStyleLargeInverse"
style="?android:attr/progressBarStyleSmall"
style="?android:attr/progressBarStyleSmallInverse"
style="?android:attr/progressBarStyleSmallTitle"

直接查看圓形進度條的樣式內容,查看方法:
  第一步:在attr.xml文件中查找progressBarStyleLarge。

<attr name="progressBarStyleLarge" format="reference" />

  第二步:在themes.xml文件中查找progressBarStyleLarge。

<item name="progressBarStyleLarge">@style/Widget.ProgressBar.Large</item>

  第三步:在style.xml文件中查找Widget.ProgressBar.Large。

    <style name="Widget.ProgressBar.Large"><item name="indeterminateDrawable">@drawable/progress_large_white</item><item name="minWidth">76dip</item><item name="maxWidth">76dip</item><item name="minHeight">76dip</item><item name="maxHeight">76dip</item></style>

  第四步:查看progress_large_white內容。

<animated-rotate xmlns:android="http://schemas.android.com/apk/res/android"android:drawable="@drawable/spinner_white_76"//圖片資源android:pivotX="50%"//相對于控件本身定位android:pivotY="50%"//相對于控件本身定位android:framesCount="12"android:frameDuration="100" />?//每幀動畫之間的時間間隔

三、實現自定義的旋轉進度條

1.將大風車的圖片放入drawable文件夾中,修改activity_main文件內容。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"><ProgressBarandroid:id="@+id/progress"style="@style/WindmillProgressBarStyle"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerInParent="true" /></RelativeLayout>

2.添加animated-rotate的xml文件

<?xml version="1.0" encoding="utf-8"?>
<animated-rotate xmlns:android="http://schemas.android.com/apk/res/android"android:drawable="@drawable/image_windmill"android:frameDuration="100"android:framesCount="12"android:pivotX="50%"android:pivotY="50%"></animated-rotate>

編譯的時候就會發現報錯,No resource identifiter found for attribute 'frameSuration' in package 'android',framesCount也是這個錯誤,說明frameDuration與framesCount是沒有辦法使用的。
解決方法就是將frameDuration與framesCount屬性刪除,添加duration屬性代替。

<?xml version="1.0" encoding="utf-8"?>
<animated-rotate xmlns:android="http://schemas.android.com/apk/res/android"android:drawable="@drawable/image_windmill"android:duration="100"android:pivotX="50%"android:pivotY="50%"></animated-rotate>

3.添加style

    <style name="WindmillProgressBarStyle">//設置繪制不顯示進度的進度條的Drawable對象<item name="android:indeterminateDrawable">@drawable/windmill_loading_view</item><item name="android:minWidth">76dip</item><item name="android:maxWidth">76dip</item><item name="android:minHeight">76dip</item><item name="android:maxHeight">76dip</item></style>

運行程序就可以看到大風車在不停的轉了。

四、增加停止、運行、隱藏功能

1.增加三個控制按鈕

    <Buttonandroid:id="@+id/play"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="10dp"android:layout_marginTop="10dp"android:text="Play" /><Buttonandroid:id="@+id/stop"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerHorizontal="true"android:layout_marginTop="10dp"android:text="Stop" /><Buttonandroid:id="@+id/gone"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentRight="true"android:layout_marginRight="10dp"android:layout_marginTop="10dp"android:text="Gone" />

2.修改ProgressBar的indeterminateDrawable的圖片

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"><item android:drawable="@drawable/image_windmill" android:state_enabled="false" /><item android:drawable="@drawable/windmill_loading_view" /></selector>

3.修改ProgressBar的style

    <style name="WindmillProgressBarStyle">//設置繪制不顯示進度的進度條的Drawable對象<item name="android:indeterminateDrawable">@drawable/windmill_loading_selector</item><item name="android:minWidth">76dip</item><item name="android:maxWidth">76dip</item><item name="android:minHeight">76dip</item><item name="android:maxHeight">76dip</item></style>

4.增加按鈕的點擊響應事件

?

    @Overridepublic void onClick(View view) {switch (view.getId()) {case R.id.play:if (progressBar.getVisibility() != View.VISIBLE) {progressBar.setVisibility(View.VISIBLE);}progressBar.setEnabled(true);break;case R.id.stop:progressBar.setEnabled(false);break;case R.id.gone:if (progressBar.getVisibility() == View.VISIBLE) {progressBar.setVisibility(View.GONE);}break;default:break;}}

運行程序點擊stop按鈕就可以看到大風車停止旋轉了,再點擊play按鈕大風車就又開始旋轉了。

?

代碼地址:https://github.com/ZhangMiao147/CustomView/tree/master/windmillprogressbar

轉載于:https://www.cnblogs.com/zhangmiao14/p/7250342.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/394810.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/394810.shtml
英文地址,請注明出處:http://en.pswp.cn/news/394810.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Android OkHttp完全解析 是時候來了解OkHttp了

Android OkHttp完全解析 是時候來了解OkHttp了 標簽&#xff1a; AndroidOkHttp2015-08-24 15:36 316254人閱讀 評論(306) 收藏 舉報分類&#xff1a;【android 進階之路】&#xff08;67&#xff09; 版權聲明&#xff1a;本文為博主原創文章&#xff0c;未經博主允許不得轉載…

c盤users的用戶名怎么改_做完這幾個操作,我從C盤中清理了30G垃圾文件

信息技術土著&#xff0c;一個有營養的公眾號有個存在學說&#xff0c;比說一個人的身體某部位&#xff0c;如果不痛&#xff0c;你很少感覺他是存在的&#xff0c;但是某一天&#xff0c;因為某種原因&#xff0c;它突然很痛了&#xff0c;然后你每時每刻都會感覺到它的存在了…

linux complete函數,Linux驅動中completion接口淺析(wait_for_complete例子,很好)

completion是一種輕量級的機制&#xff0c;它容許一個線程告訴另外一個線程工做已經完成。能夠利用下面的宏靜態建立completion&#xff1a; DECLARE_COMPLETION(my_completion); linux若是運行時建立completion&#xff0c;則必須采用如下方…

vue.js 全局應用js_如何在不到7分鐘的時間內測試您的Vue.js應用

vue.js 全局應用jsby Mukul Khanna由Mukul Khanna 如何在不到7分鐘的時間內測試您的Vue.js應用 (How you can test your Vue.js apps in less than seven minutes) Before we dive into the implementation, let’s get a few concepts cleared.在深入研究實現之前&#xff0c…

MongoDB在Linux下常用優化設置

MongoDB在Linux下常用優化設置以下是一些MongoDB推薦的常用優化設置。在生產環境下選取合適的參數值&#xff0c;例如預讀值和默認文件描述符數目等&#xff0c;會對系統性能有很大的影響。1、關閉數據庫文件的 atime禁止系統對文件的訪問時間更新會有效提高文件讀取的性能。這…

iOS常用第三方庫大全,史上最全第三方庫收集

下拉刷新 EGOTableViewPullRefresh – 最早的下拉刷新控件。SVPullToRefresh – 下拉刷新控件。MJRefresh – 僅需一行代碼就可以為UITableView或者CollectionView加上下拉刷新或者上拉刷新功能。可以自定義上下拉刷新的文字說明。具體使用看“使用方法”。 &#xff08;國人寫…

ipconfig沒有顯示ip_TCP/IP 協議修復網絡問題

nternet 在 TCP/IP 協議上工作&#xff0c;如果 TCP/IP 協議堆棧在 Windows 或任何其他操作系統(例如 Linux 或 MacOS)中無法正常工作&#xff0c;則您的 Internet 連接會出現問題。解決 Internet 問題的最佳方法是重置 TCP/IP 堆棧設置。如何在 Windows 中重置 TCP/IP 堆棧&am…

mysql卸載

先執行mysql安裝程序&#xff0c;點擊移除&#xff0c;然后再刪除對應的安裝路徑&#xff0c;必要的時候還要刪除注冊表信息。轉載于:https://www.cnblogs.com/772933011qq/p/6007752.html

mysql-linux64,Linux64下mysql安裝和開辟

1.1地址&#xff1a;http://www.mysql.com/downloads/mysql/5.5.html&#xff03;downloads版本&#xff1a;5.1.68平臺&#xff1a;linux generalGeneric Linux (glibc 2.3) (x86&#xff0c; 64-bit)&#xff0c; RPM Package版本&#xff1a;MySQL Server(MySQL-server-5.1.…

mysql 內置功能 存儲過程 目錄

mysql 內置功能 存儲過程介紹mysql 內置功能 存儲過程 創建無參存儲過程mysql 內置功能 存儲過程 創建有參存儲過程mysql 內置功能 存儲過程 刪除存儲過程轉載于:https://www.cnblogs.com/mingerlcm/p/10533021.html

簡化C語言文法

程序 → 外部聲明|程序 外部聲明 外部聲明 → 定義函數|定義 函數定義 → 類型標識符 聲明部分語句 類型標識符 → 空類型|字符型|整型|浮點型 聲明部分語句 → 指針 直接聲明|直接聲明 指針 → * |* 指針 直接聲明 → 標識符 | 直接聲明[ ] | 直接聲明[常數表達式] | 標識符&a…

elixir 規格_Elixir:一種高畫質的編程語言

elixir 規格by CityBase按CityBase Elixir&#xff1a;一種高畫質的編程語言 (Elixir: A Big-Picture Programming Language) Elixir使程序員的工作更好&#xff0c;并且使他們的工作更好 (Elixir makes programmers better at their work, and it makes their work better) A…

python截圖識別文字_用百度ocr+微信截圖實現文字識別

作用&#xff1a;將圖片中的文字識別出來 一、調用微信截圖dll控件 將微信截圖插件復制到項目文件&#xff0c;使用ctypes加載&#xff08;膠水語言就是給力&#xff09; def capture(): try: dll ctypes.cdll.LoadLibrary(PrScrn.dll) except Exception: print("Dll loa…

MySQL啟動很慢的原因

我們在啟動MySQL的時候&#xff0c;常常會遇到的是&#xff0c; 當執行啟動命令后&#xff0c;它會"Start MySQL ....." 一直不停的執行&#xff0c;也不中斷&#xff0c;也不成功 這里會出現此現象的原因有以下三條&#xff1a; 1. 配置文件中的InnoDBuffer數大于物…

linux線程出錯,在線程應用程序(linux,pthreads)中讀取文件大小時出錯

我試圖從Linux中的文件夾中讀取所有文件和目錄&#xff0c;其線程為 獲取最大文件大小&當前目錄和當前目錄樹下的名稱。在線程應用程序(linux&#xff0c;pthreads)中讀取文件大小時出錯主線程掃描基本目錄查找文件&#xff0c;當找到它的目錄時&#xff0c;會生成一個新線…

【用jQuery來判斷瀏覽器的類型】及【javascript獲取用戶ip地址】

用jQuery來判斷瀏覽器的類型,主要是使用$.browser這個工具類,使用方法: $.browser.[瀏覽器關鍵字] //谷歌瀏覽器、360瀏覽器等其他一些瀏覽器&#xff0c;沒有專門的判斷 function appInfo() {var bro $.browser;var binfo "";if (bro.msie) {binfo "Micr…

python函數學習1

函數1 &#xff08;1&#xff09;定義&#xff1a; def 函數名&#xff08;參數列表&#xff09;函數體 &#xff08;2&#xff09;參數傳遞&#xff1a; 在python中&#xff0c;一切都是對象&#xff0c;類型也屬于對象&#xff0c;變量是沒有類型的。 a [1,2,3] a "he…

kafka應用于區塊鏈_Apache Kafka的區塊鏈實驗

kafka應用于區塊鏈by Luc Russell盧克羅素(Luc Russell) Apache Kafka的區塊鏈實驗 (A blockchain experiment with Apache Kafka) Blockchain technology and Apache Kafka share characteristics which suggest a natural affinity. For instance, both share the concept o…

pythonfor循環100次_以寫代學: python for循環 range函數 xrange函數

腳本一&#xff1a; #!/usr/bin/env python # coding: utf8 sum100 0 for i in range(101): sum100 i #&#xff08;1&#xff09;range是一個可以取值的函數&#xff0c;上邊這個取的是0-100&#xff0c;并不包含101 #&#xff08;2&#xff09;也可以指定&#xff0c;比如r…

iis下php 500錯誤

很不想用iis&#xff0c;然而客戶不想增加機器&#xff0c;只好按客戶的意思了。可是沒想到發送短信以在本地 機器上是好的&#xff0c;在iis下直接500。 ??一開始以為是防火墻問題&#xff0c;后來檢查了一下沒有&#xff0c;再后來換了一個短信接口&#xff0c;就莫名其妙好…