本文主要是记录ProgressBar源码的学习过程
先介绍一下学习源码的工具,工欲善其事必先利其器嘛,
Android SDK search,google浏览器插件,启用插件,然后进入官网: 查找ProgressBar
不过这个源码不是我想查看的,我的目标是progressbar那个旋转动画,往下找,发现找了一圈,style里没有想要的,就自定义个个style,继承自ProgressBar,
一路点击 parent,最后看到:
<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>
<item name="indeterminateDrawable">@drawable/progress_medium_white</item>就是我要找的了
回到api 官网找源码,在drawble下面
<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" />
以为复制过来就可以直接使用,没想到android:framesCount 找不到,只有自己画一个圆形加载圈圈了drawble/round_progress.xml
<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromDegrees="0"
android:toDegrees="360"
android:pivotX="50%"
android:pivotY="50%"
>
<shape
android:innerRadiusRatio="3"
android:shape="ring"
android:thicknessRatio="10"
android:useLevel="false" >
<gradient
android:startColor="#FFFFFF"
android:centerColor="#FFAABF"
android:endColor="#FFAABF"
android:centerY="0.50"
android:type="sweep"
android:useLevel="false" />
</shape>
</rotate>
使用
<ProgressBar
style="?android:attr/progressBarStyleLarge"
android:indeterminateDrawable="@drawable/round_progress"
android:layout_width="60dp"
android:layout_height="60dp"
/>
顺便总结一下 shape
shape可以绘制矩形,环形以及椭圆,size 高宽设置成一样就是正圆.
solid表示图形的填充色,
stroke则代表边框线,所以两者结合可以实现带边缘的图形
如果是虚线,使用 dashGap
size控制高宽
corners 圆角
gradient 渐变色
白色的圆
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<solid android:color="@android:color/white"/>
<size android:width="22dp"
android:height="22dp"/>
</shape>
从上而下的一个渐变色 ;angle = 0 ,从左往右
<shape android:shape="rectangle">
<gradient android:startColor="#ffffff"
android:endColor="#ffd88d"
android:angle="90"/>
</shape>
带边框的圆角透明图形
<shape >
<stroke android:width="2dp" android:color="#FFAABF"/>
<solid android:color="#00fff000"/>
<corners android:radius="5dp" />
</shape>
结果不重要,重要的是解决问题的过程,比如查看源码的流程