0

我在我的应用程序的两个地方使用了我的自定义视图,ColorStrip:在ListView项目中和在单独的FragmentActivity. ListView 项目正确显示我的视图,但由于某些奇怪的原因,当ColorStrip为 my 创建a 时FragmentActivityhPxwPx变量​​分别设置为所有数字中的 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" />

为什么变量被赋予这些奇怪的值?

4

1 回答 1

1

不要将 hPx 和 wPx 声明为静态的。此外,缓存它们并在第一次调用 onDraw 时进行设置也不是一个好主意。根据http://android.developer.com上的自定义绘图文档,一个更好的地方是View.onSizeChanged()

于 2012-11-11T08:36:28.767 回答