全局整数被赋予错误的值

时间:2012-11-11 07:15:55

标签: android android-view

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

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

1 个答案:

答案 0 :(得分:1)

不要将hPx和wPx声明为静态。另外,缓存它们并且只需在第一次调用onDraw时设置它就不是一个好主意。根据{{​​3}}上的View.onSizeChanged()文档,Custom Drawing是一个更好的地方。