昨天看了一下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
themes.xml 定义了一些索引式的item,通过这些item可以找到相应的style,通过下面的红色部分可以去styles.xml中找对应的style
styles.xml 定义了各种style的内容,包含图片,animation,尺寸等,通过下面红字部分可以找到图片
drawable/ progress_medium_white.xml
android:pivotX="50%"
android:pivotY="50%"
android:framesCount="12"
android:frameDuration="100" />
找到这里应该就可以结束本篇了。想要知道各种参数的意义,可以去api网站上查看。