Android 创建自定义视图和XML命名空间
我试图在android中创建自定义视图我在MainActivity和XML文件中提到了我的所有arrtrs列表,但我发现Android 创建自定义视图和XML命名空间,android,Android,我试图在android中创建自定义视图我在MainActivity和XML文件中提到了我的所有arrtrs列表,但我发现main.XML中有一个错误: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:custom="http://schemas.android.com/ap
main.XML
中有一个错误:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:custom="http://schemas.android.com/apk/res/com.example.customviews.piechart"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<com.example.customviews.charting.piechart.MainActivity
android:layout_width="match_parent"
android:layout_height="?android:attr/listPreferredItemHeight"
custom:titleText="Background color"
custom:valueColor="@android:color/holo_green_light"
/>
</LinearLayout>
您是否有一个没有参数的构造函数 您应该添加一个构造函数,如:
public MainActivity(Context context, AttributeSet attrs) {
super(context, attrs);
}
或
您要求提供一个自定义视图的简单示例:
public class BirdView extends ImageView {
private float direction = 0;
Paint paint = new Paint();
public BirdView(Context context) {
super(context);
}
public BirdView(Context context, AttributeSet attrs) {
super(context, attrs);
paint.setColor(Color.WHITE);
paint.setStrokeWidth(6);
}
public BirdView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
setMeasuredDimension(MeasureSpec.getSize(widthMeasureSpec),
MeasureSpec.getSize(heightMeasureSpec));
}
@Override
public void draw(Canvas canvas) {
canvas.save();
int stratX = getWidth() / 2;
int startY = getHeight() / 2;
canvas.rotate(direction, stratX, startY);
super.draw(canvas);
canvas.restore();
canvas.drawLine(stratX, startY, stratX, startY + 80, paint);
}
public void update(float dir) {
direction = dir;
invalidate();
}
}错误是什么。。粘贴logcat数据是com.example.customviews.charting.piechart.main活动真的是视图吗?你需要发布更多信息才能得到答案。我认为
com.example.customviews.charting.piechart.main活动
没有扩展视图
,如果是这样的话,您需要一种更好的方式来命名您的类/视图。它给出了一个确定的错误,现在错误已经被删除,但是应用程序没有启动。我有构造函数,但是在logcat中,它给出了一个错误,无法实例化活动组件信息{com.example.customviews.charting.piechart/com.example.customviews.charting.piechart.MainActivity}:java.lang.InstantiationException:无法实例化类com.example.customviews.charting.piechart.MainActivity;没有空构造函数我认为没有参数的构造函数是问题所在。你能不能把它放在一个里面:public MainActivity(Context-Context){super(Context);}下面是公共类MainActivity扩展视图的代码{public MainActivity(Context-Context,AttributeSet attrs){super(Context,attrs);}但是我在其他代码中也遇到了同样的问题。你的类最初有一个类似这样的构造函数:“public main activity(){}”,没有参数。你能给我推荐一个简单的例子,说明如何在android中创建自定义视图吗
public class BirdView extends ImageView {
private float direction = 0;
Paint paint = new Paint();
public BirdView(Context context) {
super(context);
}
public BirdView(Context context, AttributeSet attrs) {
super(context, attrs);
paint.setColor(Color.WHITE);
paint.setStrokeWidth(6);
}
public BirdView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
setMeasuredDimension(MeasureSpec.getSize(widthMeasureSpec),
MeasureSpec.getSize(heightMeasureSpec));
}
@Override
public void draw(Canvas canvas) {
canvas.save();
int stratX = getWidth() / 2;
int startY = getHeight() / 2;
canvas.rotate(direction, stratX, startY);
super.draw(canvas);
canvas.restore();
canvas.drawLine(stratX, startY, stratX, startY + 80, paint);
}
public void update(float dir) {
direction = dir;
invalidate();
}