我在我的应用程序的两个地方使用了我的自定义视图,ColorStrip
:在ListView
项目中和在单独的FragmentActivity
. ListView 项目正确显示我的视图,但由于某些奇怪的原因,当ColorStrip
为 my 创建a 时FragmentActivity
,hPx
和wPx
变量分别设置为所有数字中的 102 和 8。如果我在为 ListView 项创建这些变量时检查它们的值(在执行期间onCreate()
,它们都显示为零。但是当它为我的 FragmentActivity 创建 ColorStrip 时,它们被分配了那些奇怪的值。
我不明白为什么在为 FragmentActivity 创建变量时,变量会被分配 0 以外的值。
这是我的子类的所有代码View
:
public class ColorStrip extends View {
public ShapeDrawable mDrawable;
private static int hPx = 0;
private static int wPx = 0;
public ColorStrip(Context context, AttributeSet attrs) {
super(context, attrs);
mDrawable = new ShapeDrawable(new RectShape());
TypedArray a = context.getTheme().obtainStyledAttributes(attrs,
R.styleable.ColorStrip, 0, 0);
try {
int color = a.getInt(R.styleable.ColorStrip_color, 0);
if (color != 0)
setColor(color);
} finally {
a.recycle();
}
}
protected void onDraw(Canvas canvas) {
if (wPx == 0)
wPx = getWidth();
if (hPx == 0)
hPx = getHeight();
mDrawable.setBounds(0, 0, wPx, hPx);
mDrawable.draw(canvas);
}
public void setColor(int color) {
mDrawable.getPaint().setColor(color);
}
}
这是 ListView 的 XML:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal">
<com.acedit.assignamo.ui.ColorStrip
android:id="@+id/assignment_list_color_strip"
android:layout_width="@dimen/color_strip_width"
android:layout_height="match_parent" />
和 FragmentActivity 的 XML:
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:ColorStrip="http://schemas.android.com/apk/res/com.acedit.assignamo"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<com.acedit.assignamo.ui.ColorStrip
android:id="@+id/assignment_view_color_strip"
android:layout_width="match_parent"
android:layout_height="@dimen/assignment_view_color_strip_height" />
为什么变量被赋予这些奇怪的值?