Android移植之自定义ProgressBar

昨天看了一下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


drawable/ progress_medium_white.xml

android:drawable="@drawable/spinner_white_48"
android:pivotX="50%"
android:pivotY="50%"
android:framesCount="12"
android:frameDuration="100" />

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

你可能感兴趣的:(Android移植之自定义ProgressBar)