昨天看了一下progressbar,今天总结一下。

ProgressBar这个类在/froyo/frameworks/base/core/java/android/widget/ProgressBar.java

当你去new一个ProgressBar的时候需要传进去参数,我们从这里看一下它执行的流程。

本篇的主要意图还是告诉你如何修改style去改变样式,如果你想diy自己的ProgressBar,相信对作移植的朋友有所帮助。

ProgressBar.java

public ProgressBar(Context context, AttributeSet attrs) {
this(context, attrs, com.android.internal.R.attr.progressBarStyle);

//如果你只是给出ProgressBar的参数集,那么就会去找默认的那个progressBar的style;

//我们就以默认的style作为示例,从这里去调下面的构造方法
}

public ProgressBar(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
mUiThreadId = Thread.currentThread().getId();

//这里不多说,我们需要UI线程才能画图
initProgressBar();

TypedArray a =
context.obtainStyledAttributes(attrs, R.styleable.ProgressBar, defStyle, 0);
//这里才是关键,通过传过来的defstyle的名字com.android.internal.R.attr.progressBarStyle找到themes.xml中的item

//通过这个item的name去styles.xml中找相应的style,具体过程如下:

//R.styleable.ProgressBar是声明参数列表和参数类型的,用于跟前面的attrs匹配,封装成TypedArray

//这个过程在 /froyo/frameworks/base/core/java/android/content/Context.java

// /froyo/frameworks/base/core/java/android/content/res/Resource.java

//里面可以找到。

//下面就是初始化一些参数了,不必细述。

...
}
attrs.xml 声明了ProgressBar这个styleable参数列表其他的widget下的公共控件也是如此。

R.styleable.ProgressBar

<declare-styleable name="ProgressBar">
<!-- Defines the maximum value the progress can take. -->
<attr name="max" format="integer" />
<!-- Defines the default progress value, between 0 and max. -->
<attr name="progress" format="integer" />
<!-- Defines the secondary progress value, between 0 and max. This progress is drawn between
the primary progress and the background. It can be ideal for media scenarios such as
showing the buffering progress while the default progress shows the play progress. -->
<attr name="secondaryProgress" format="integer" />
<!-- Allows to enable the indeterminate mode. In this mode the progress
bar plays an infinite looping animation. -->
<attr name="indeterminate" format="boolean" />
<!-- Restricts to ONLY indeterminate mode (state-keeping progress mode will not work). -->
<attr name="indeterminateOnly" format="boolean" />
<!-- Drawable used for the indeterminate mode. -->
<attr name="indeterminateDrawable" format="reference" />
<!-- Drawable used for the progress mode. -->
<attr name="progressDrawable" format="reference" />
<!-- Duration of the indeterminate animation. -->
<attr name="indeterminateDuration" format="integer" min="1" />
<!-- Defines how the indeterminate mode should behave when the progress
reaches max. -->
<attr name="indeterminateBehavior">
<!-- Progress starts over from 0. -->
<enum name="repeat" value="1" />
<!-- Progress keeps the current value and goes back to 0. -->
<enum name="cycle" value="2" />
</attr>
<attr name="minWidth" format="dimension" />
<attr name="maxWidth" />
<attr name="minHeight" format="dimension" />
<attr name="maxHeight" />
<attr name="interpolator" format="reference" />
</declare-styleable>

themes.xml 定义了一些索引式的item,通过这些item可以找到相应的style,通过下面的红色部分可以去styles.xml中找对应的style

<style>

<item name="progressBarStyle">@android:style/Widget.ProgressBar</item>

<style>

styles.xml 定义了各种style的内容,包含图片,animation,尺寸等,通过下面红字部分可以找到图片

<style name="Widget.ProgressBar">
<item name="android:indeterminateOnly">true</item>
<item name="android:indeterminateDrawable">@android:drawable/progress_medium_white</item>
<item name="android:indeterminateBehavior">repeat</item>
<item name="android:indeterminateDuration">3500</item>
<item name="android:minWidth">48dip</item>
<item name="android:maxWidth">48dip</item>
<item name="android:minHeight">48dip</item>
<item name="android:maxHeight">48dip</item>
</style>
drawable/progress_medium_white.xml

<animated-rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/spinner_white_48"
android:pivotX="50%"
android:pivotY="50%"
android:framesCount="12"
android:frameDuration="100" />

找到这里应该就可以结束本篇了。想要知道各种参数的意义,可以去api网站上查看。

昨天看了一下progressbar,今天总结一下。

ProgressBar这个类在/froyo/frameworks/base/core/java/android/widget/ProgressBar.java

当你去new一个ProgressBar的时候需要传进去参数,我们从这里看一下它执行的流程。

本篇的主要意图还是告诉你如何修改style去改变样式,如果你想diy自己的ProgressBar,相信对作移植的朋友有所帮助。

ProgressBar.java

public ProgressBar(Context context, AttributeSet attrs) {
this(context, attrs, com.android.internal.R.attr.progressBarStyle);

//如果你只是给出ProgressBar的参数集,那么就会去找默认的那个progressBar的style;

//我们就以默认的style作为示例,从这里去调下面的构造方法
}

public ProgressBar(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
mUiThreadId = Thread.currentThread().getId();

//这里不多说,我们需要UI线程才能画图
initProgressBar();

TypedArray a =
context.obtainStyledAttributes(attrs, R.styleable.ProgressBar, defStyle, 0);
//这里才是关键,通过传过来的defstyle的名字com.android.internal.R.attr.progressBarStyle找到themes.xml中的item

//通过这个item的name去styles.xml中找相应的style,具体过程如下:

//R.styleable.ProgressBar是声明参数列表和参数类型的,用于跟前面的attrs匹配,封装成TypedArray

//这个过程在 /froyo/frameworks/base/core/java/android/content/Context.java

// /froyo/frameworks/base/core/java/android/content/res/Resource.java

//里面可以找到。

//下面就是初始化一些参数了,不必细述。

...
}
attrs.xml 声明了ProgressBar这个styleable参数列表其他的widget下的公共控件也是如此。

R.styleable.ProgressBar

<declare-styleable name="ProgressBar">
<!-- Defines the maximum value the progress can take. -->
<attr name="max" format="integer" />
<!-- Defines the default progress value, between 0 and max. -->
<attr name="progress" format="integer" />
<!-- Defines the secondary progress value, between 0 and max. This progress is drawn between
the primary progress and the background. It can be ideal for media scenarios such as
showing the buffering progress while the default progress shows the play progress. -->
<attr name="secondaryProgress" format="integer" />
<!-- Allows to enable the indeterminate mode. In this mode the progress
bar plays an infinite looping animation. -->
<attr name="indeterminate" format="boolean" />
<!-- Restricts to ONLY indeterminate mode (state-keeping progress mode will not work). -->
<attr name="indeterminateOnly" format="boolean" />
<!-- Drawable used for the indeterminate mode. -->
<attr name="indeterminateDrawable" format="reference" />
<!-- Drawable used for the progress mode. -->
<attr name="progressDrawable" format="reference" />
<!-- Duration of the indeterminate animation. -->
<attr name="indeterminateDuration" format="integer" min="1" />
<!-- Defines how the indeterminate mode should behave when the progress
reaches max. -->
<attr name="indeterminateBehavior">
<!-- Progress starts over from 0. -->
<enum name="repeat" value="1" />
<!-- Progress keeps the current value and goes back to 0. -->
<enum name="cycle" value="2" />
</attr>
<attr name="minWidth" format="dimension" />
<attr name="maxWidth" />
<attr name="minHeight" format="dimension" />
<attr name="maxHeight" />
<attr name="interpolator" format="reference" />
</declare-styleable>

themes.xml 定义了一些索引式的item,通过这些item可以找到相应的style,通过下面的红色部分可以去styles.xml中找对应的style

<style>

<item name="progressBarStyle">@android:style/Widget.ProgressBar</item>

<style>

styles.xml 定义了各种style的内容,包含图片,animation,尺寸等,通过下面红字部分可以找到图片

<style name="Widget.ProgressBar">
<item name="android:indeterminateOnly">true</item>
<item name="android:indeterminateDrawable">@android:drawable/progress_medium_white</item>
<item name="android:indeterminateBehavior">repeat</item>
<item name="android:indeterminateDuration">3500</item>
<item name="android:minWidth">48dip</item>
<item name="android:maxWidth">48dip</item>
<item name="android:minHeight">48dip</item>
<item name="android:maxHeight">48dip</item>
</style>
drawable/progress_medium_white.xml

<animated-rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/spinner_white_48"
android:pivotX="50%"
android:pivotY="50%"
android:framesCount="12"
android:frameDuration="100" />

找到这里应该就可以结束本篇了。想要知道各种参数的意义,可以去api网站上查看。

Android移植之自定义ProgressBar相关推荐

  1. android 开源 progressbar,Android 两种自定义ProgressBar

    横向的ProgressBar 在res下创建drawable文件夹,新建文件drawable/progressbar_color.xml android:angle="90.0" ...

  2. Android 自定义ProgressBar 实现进度圆环

    实现的效果如下图 实现效果图demo 的地址 代码很简单自定义ProgressBar 下面直接列举下代码 progressBarView 的代码如下 public class ProgressBarV ...

  3. android自定义progressbar样式,Android开发中如何实现自定义ProgressBar的样式

    Android开发中如何实现自定义ProgressBar的样式 发布时间:2020-11-20 16:08:10 来源:亿速云 阅读:294 作者:Leah Android开发中如何实现自定义Prog ...

  4. android 自定义背景园,Android 自定义ProgressBar 进度条颜色和背景颜色

    Android 自定义ProgressBar 进度条颜色和背景颜色 首先,在drawable目录下新建文件 personal_center_level_progress_bg.xmlandroid a ...

  5. android 自定义进度条_第一百八十九回:Android中自定义ProgressBar三

    各位看官们大家好,上一回中咱们说的是Android中自定义ProgressBar的例子,这一回咱们继续说该例子.闲话休提,言归正转.让我们一起Talk Android吧! 看官们,我们在上一回是通过自 ...

  6. android 自定义progressbar demo,Android自定义View――动态ProgressBar之模仿360加速球

    在之前一篇文章中我们讲解了三种ProgressBar的做法,详见-><Android 自定义View--自定义ProgressBar >.这一节中我们模仿360加速球制作一个动态Pr ...

  7. 自定义android进度条渐变,自定义ProgressBar简单完成颜色渐变功能进度条

    我们在使用电脑或者手机时,经常会遇到进度条,比如下图: 今天我来演示一下,如何做出简单并且漂亮的颜色渐变进度条. 首先我先新建了一个系统默认样式的进度条,代码如下: 运行后显示如下: 大家可以看出,并 ...

  8. android自定义progressbar 图片,自定义ProgressBar(自定义View和ClipDrawable)

    开发中经常需要自定义ProgressBar,这里用了自定义View和ClipDrawable实现简单的ProgressBar 自定义View效果: public class CustomProgres ...

  9. 自定义ProgressBar(自定义View和ClipDrawable)

    开发中经常需要自定义ProgressBar,这里用了自定义View和ClipDrawable实现简单的ProgressBar 自定义View效果: public class CustomProgres ...

最新文章

  1. 关于计算机网络传输介质 下列叙述正确的是,《计算机基础》习题1-7
  2. 初始 DQN 程序 所遇到的问题
  3. iOS 开发 OC编程 字典和集合 排序方法
  4. Atitit.遍历图像像素点rgb java attilax总结
  5. mac 上压测工具_Mac上的触控板/鼠标增强工具推荐
  6. 10.03今日暂时停更博客
  7. Spring Boot引起的“堆外内存泄漏”排查及经验总结 1
  8. Nancy之Cache的简单使用
  9. [转]Artech的WCF之旅(1):创建一个简单的WCF程序
  10. python项目报告模板_python接口自动化(五)--接口测试用例和接口测试报告模板(详解)...
  11. 基于AHP(层次分析法)确定权值的模糊综合评价
  12. 区块链的发展与未来前景!
  13. USBKey使用openssl链接
  14. ccc-sklearn-11-线性回归(1)
  15. 分享优秀品牌平面广告创意作品的创意密码
  16. X站全称是什么_考不上高中上什么专业
  17. 【第75题】给定一个字符串,将它转换成整数
  18. js对象转byte数组
  19. 【OpenCV 例程 300篇】221.加密马赛克图像处理与解密复原
  20. xshell6、Xshell7最新版使用

热门文章

  1. .net使用正则表达式校验、匹配字符工具类
  2. 关于WEB集群中文件服务器的讨论
  3. Spring Security视频地址
  4. django 接收ajax请求
  5. Netscreen204防火墙配置网络设备的SNMP及Syslog配置
  6. C#面向对象名词比较(三)
  7. configServer的高可用
  8. macOS U盘烧录Linux iso镜像
  9. 解决logstash启动过慢的问题
  10. 代码校验工具 SublimeLinter 的安装与使用