一起Talk Android吧(第一百九十一回:Android中自定义ProgressBar原理分析与总结一)

本文深入探讨了Android中ProgressBar的工作原理,解析其作为View子类如何通过重写onMeasure和onDraw方法实现自定义,以及系统默认进度条如何利用Drawable资源和动画效果呈现动态旋转状态。

各位看官们大家好,上一回中咱们说的是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原理与总结的例子咱们就介绍到这里,欲知后面还有什么例子,且听下回分解!

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

talk_8

真诚赞赏,手有余香

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值