我正在为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错误的方式,或者发生了什么?
答案 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);
}
一切顺利!
非常感谢你的帮助: - )