制作一个大风车加载条

一、前言

  不想使用普通的那种转圈的加载条,所以找了一个大风车的图片,想要用旋转的大风车来表示加载中。
  一般都会想着将大风车图片设置成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.mzph.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;就莫名其妙好…