各位看官们大家好,上一回中咱们说的是Android中自定义ProgressBar的例子,这一回咱们说的例子是ProgressBar原理与总结。闲话休提,言归正转。让我们一起Talk Android吧!
看官们,我们在前面章回中自定义了ProgressBar,这一回章回中分析一下它的原理。要看它的原理,源代码是最好的资料,这里先不列出详细的源代码,我们只做一些概括性的总结,详细的内容就不分一一分析了。
- 1.它是View的子类,可以看作是自定义View的一个例子;
- 2.它重写了View中的onMeasure方法和onDraw方法;
- 3.它借助了Drawable资源来完成图形相关的内容;
关于重写onMeasure方法和onDraw方法的内容,我们在自定义View的时候介绍过,因此,这里不详细分析了。我们重点分析一下Drawable资源的结构,首先看一下系统默认的进度条,它使用了系统提供的style来装饰进度条,该文件位于frameworks/base/core/res/res/values/styles.xml文件中,style的名称为:Widget.ProgressBar,下面是它的源代码:
<style name="Widget.ProgressBar">
<item name="indeterminateOnly">true</item>
<item name="indeterminateDrawable">@drawable/progress_medium_white</item>
<item name="indeterminateBehavior">repeat</item>
<item name="indeterminateDuration">3500</item>
<item name="minWidth">48dip</item>
<item name="maxWidth">48dip</item>
<item name="minHeight">48dip</item>
<item name="maxHeight">48dip</item>
<item name="mirrorForRtl">false</item>
</style>
上面的源代码中使用了Drawable资源:progress_medium_white,它位于frameworks/base/core/res/res/values/drawable/目录下,下面是具体的源代码:
<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" />
从中可以看出它使用了动画,动画中使用了其它的Drawable资源:spinner_white_48,该资源文件是一个png格式的图片,位于frameworks/base/core/res/res/drawable-mdpi目录下。因为style中把indeterminateOnly属性设置了true,因此默认的进度条使用此style后就会不停地旋转资源中的图片,也就是刚才说的spinner_white_48.png这个图片。
各位看官,关于Android中ProgressBar原理与总结的例子咱们就介绍到这里,欲知后面还有什么例子,且听下回分解!
本文深入探讨了Android中ProgressBar的工作原理,解析其作为View子类如何通过重写onMeasure和onDraw方法实现自定义,以及系统默认进度条如何利用Drawable资源和动画效果呈现动态旋转状态。

被折叠的 条评论
为什么被折叠?



