自定义ImageView崩溃程序

时间:2011-04-14 18:08:16

标签: android android-layout

我正在为Android制作一个小应用程序,我有一个RelativeLayout,其中包含一个自定义ImageView。在我的Java代码中,我有这个类:

package com.example.android.helloactivity;


class ArrowImageView extends ImageView {
    public ArrowImageView(Context context) {
        super(context);
    }
    public void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        canvas.drawCircle(10,10,10,null);
    }
}

然后在我的RelativeLayout xml中,我有以下内容:

<RelativeLayout android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:orientation="vertical"
            android:background="#FFF"
            xmlns:android="http://schemas.android.com/apk/res/android">
    <Button ...... />
    <TextView ......./>

    <com.example.android.helloactivity.ArrowImageView
        android:id="@+id/hello_activity_bearingarrow"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</RelativeLayout>

当我运行我的主类(此处未显示)时,我的程序崩溃了。如果我省略了对ArrowImageView的xml引用,那么它不会崩溃。

我指的是我的自定义类te错误的方式,或者发生了什么?

3 个答案:

答案 0 :(得分:10)

扩展View小部件时,如果计划在XML布局中使用它们,则还需要覆盖采用AttributeSet参数的构造函数。

答案 1 :(得分:4)

首先不要扩展ImageView而只是扩展View,除非你知道并想要使用的是ImageView的特殊内容。

其次,正如Leffel所说,你需要像这样陈述属性集

public ArrowImageView(Context context, AttributeSet set) {         
 super(context, set);     
} 

此外,您可能需要通过将witdh和height设置为100dp来为自定义视图添加一些大小。我不确定当内部没有其他视图时,自定义View可以“换行”。

答案 2 :(得分:0)

感谢您的回答。我在onPaint方法本身发现了一个错误,它仍然使事情崩溃。在实施建议并将onPaint更改为:

之后
public void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    Paint paint = new Paint();
    paint.setColor(Color.MAGENTA);
    canvas.drawCircle(10,10,10,paint);
}
一切顺利! 非常感谢你的帮助: - )