在Android中创建自定义视图时出现运行时错误

在Android中创建自定义视图时出现运行时错误,android,runtime-error,Android,Runtime Error,我是Android新手。我正在创建一个简单的自定义视图,并在运行时出错,代码如下我的MainActivity类是 package com.example.startlocking; import android.app.Activity; import android.os.Bundle; public class MainActivity extends Activity { //private CustomView customView; @Override p

我是Android新手。我正在创建一个简单的自定义视图,并在运行时出错,代码如下
我的MainActivity类是

package com.example.startlocking;

import android.app.Activity;
import android.os.Bundle;

public class MainActivity extends Activity {

    //private CustomView customView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);     

    //  customView = (CustomView)findViewById(R.id.custom_view);
    }


}
而CustomView类是:

package com.example.startlocking;

import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.View;

@SuppressLint("DrawAllocation")
public class CustomView extends View{
    public CustomView(Context context) {
        super(context);
        // TODO Auto-generated constructor stub
    }
    @Override
    protected void onDraw(Canvas canvas) {
        // TODO Auto-generated method stub
        super.onDraw(canvas);

        int cx = canvas.getWidth();
        int cy = canvas.getHeight();
        int radius = 200;

        Paint paint = new Paint();
        paint.setColor(Color.rgb(184,184,184));
        paint.setStyle(Paint.Style.FILL);
        paint.setStrokeWidth(4.5f);
        canvas.drawCircle(cx/2, cy/2, radius, paint);
    }

}
我的activity_主xml文件是

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
>

<ImageView
    android:id="@+id/image1"
    android:layout_width="30dp"
    android:layout_height="30dp"
    android:layout_alignParentRight="true"
    android:layout_alignParentTop="true"
    android:src="@drawable/settings" />


<com.example.startlocking.CustomView
    android:id="@+id/custom_view"
    android:layout_width="500dp"
    android:layout_height="300dp"
    android:layout_marginTop="100dp" />
    </RelativeLayout>

如何更正此错误。

如果您使用的是xml,最后必须覆盖三个构造函数,如下所示:

public CustomView(Context context) {
        super(context);

    }

    /**
     * Default constructors.
     * 
     * @param context
     * @param attrs
     */
    public CustomView(Context context, AttributeSet attrs) {
        super(context, attrs);

    }

    /**
     * Default constructors.
     * 
     * @param context
     * @param attrs
     * @param defStyle
     */
    public CustomView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);

    }

如果您使用的是xml,最后您必须覆盖三个构造函数,如下所示:

public CustomView(Context context) {
        super(context);

    }

    /**
     * Default constructors.
     * 
     * @param context
     * @param attrs
     */
    public CustomView(Context context, AttributeSet attrs) {
        super(context, attrs);

    }

    /**
     * Default constructors.
     * 
     * @param context
     * @param attrs
     * @param defStyle
     */
    public CustomView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);

    }

如果您使用的是xml,最后您必须覆盖三个构造函数,如下所示:

public CustomView(Context context) {
        super(context);

    }

    /**
     * Default constructors.
     * 
     * @param context
     * @param attrs
     */
    public CustomView(Context context, AttributeSet attrs) {
        super(context, attrs);

    }

    /**
     * Default constructors.
     * 
     * @param context
     * @param attrs
     * @param defStyle
     */
    public CustomView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);

    }

如果您使用的是xml,最后您必须覆盖三个构造函数,如下所示:

public CustomView(Context context) {
        super(context);

    }

    /**
     * Default constructors.
     * 
     * @param context
     * @param attrs
     */
    public CustomView(Context context, AttributeSet attrs) {
        super(context, attrs);

    }

    /**
     * Default constructors.
     * 
     * @param context
     * @param attrs
     * @param defStyle
     */
    public CustomView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);

    }

您必须声明正确的构造函数:

public class CustomView extends View{


    public CustomView (Context context, AttributeSet attrs){
        super(context, attrs)
    }


    // Themed
    public CustomView (Context context, AttributeSet attrs, int defStyleAttr){
        super(context, attrs, defStyleAttr)
    }

    // Since API 21
    public CustomView (Context context, AttributeSet attrs,int defStyleAttr, int defStyleRes){
        super(context, attrs, defStyleAttr, defStyleRes)
    }


    public CustomView(Context context) {
        super(context);
    }



    @Override
    protected void onDraw(Canvas canvas) {
        // TODO Auto-generated method stub
        super.onDraw(canvas);

        int cx = canvas.getWidth();
        int cy = canvas.getHeight();
        int radius = 200;

        Paint paint = new Paint();
        paint.setColor(Color.rgb(184,184,184));
        paint.setStyle(Paint.Style.FILL);
        paint.setStrokeWidth(4.5f);
        canvas.drawCircle(cx/2, cy/2, radius, paint);
    }

}

您必须声明正确的构造函数:

public class CustomView extends View{


    public CustomView (Context context, AttributeSet attrs){
        super(context, attrs)
    }


    // Themed
    public CustomView (Context context, AttributeSet attrs, int defStyleAttr){
        super(context, attrs, defStyleAttr)
    }

    // Since API 21
    public CustomView (Context context, AttributeSet attrs,int defStyleAttr, int defStyleRes){
        super(context, attrs, defStyleAttr, defStyleRes)
    }


    public CustomView(Context context) {
        super(context);
    }



    @Override
    protected void onDraw(Canvas canvas) {
        // TODO Auto-generated method stub
        super.onDraw(canvas);

        int cx = canvas.getWidth();
        int cy = canvas.getHeight();
        int radius = 200;

        Paint paint = new Paint();
        paint.setColor(Color.rgb(184,184,184));
        paint.setStyle(Paint.Style.FILL);
        paint.setStrokeWidth(4.5f);
        canvas.drawCircle(cx/2, cy/2, radius, paint);
    }

}

您必须声明正确的构造函数:

public class CustomView extends View{


    public CustomView (Context context, AttributeSet attrs){
        super(context, attrs)
    }


    // Themed
    public CustomView (Context context, AttributeSet attrs, int defStyleAttr){
        super(context, attrs, defStyleAttr)
    }

    // Since API 21
    public CustomView (Context context, AttributeSet attrs,int defStyleAttr, int defStyleRes){
        super(context, attrs, defStyleAttr, defStyleRes)
    }


    public CustomView(Context context) {
        super(context);
    }



    @Override
    protected void onDraw(Canvas canvas) {
        // TODO Auto-generated method stub
        super.onDraw(canvas);

        int cx = canvas.getWidth();
        int cy = canvas.getHeight();
        int radius = 200;

        Paint paint = new Paint();
        paint.setColor(Color.rgb(184,184,184));
        paint.setStyle(Paint.Style.FILL);
        paint.setStrokeWidth(4.5f);
        canvas.drawCircle(cx/2, cy/2, radius, paint);
    }

}

您必须声明正确的构造函数:

public class CustomView extends View{


    public CustomView (Context context, AttributeSet attrs){
        super(context, attrs)
    }


    // Themed
    public CustomView (Context context, AttributeSet attrs, int defStyleAttr){
        super(context, attrs, defStyleAttr)
    }

    // Since API 21
    public CustomView (Context context, AttributeSet attrs,int defStyleAttr, int defStyleRes){
        super(context, attrs, defStyleAttr, defStyleRes)
    }


    public CustomView(Context context) {
        super(context);
    }



    @Override
    protected void onDraw(Canvas canvas) {
        // TODO Auto-generated method stub
        super.onDraw(canvas);

        int cx = canvas.getWidth();
        int cy = canvas.getHeight();
        int radius = 200;

        Paint paint = new Paint();
        paint.setColor(Color.rgb(184,184,184));
        paint.setStyle(Paint.Style.FILL);
        paint.setStrokeWidth(4.5f);
        canvas.drawCircle(cx/2, cy/2, radius, paint);
    }

}

覆盖CustomView中的所有构造函数

public CustomView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public CustomView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

覆盖CustomView中的所有构造函数

public CustomView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public CustomView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

覆盖CustomView中的所有构造函数

public CustomView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public CustomView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

覆盖CustomView中的所有构造函数

public CustomView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public CustomView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

定义自定义类的所有构造函数(2和3参数)]定义自定义类的所有构造函数(2和3参数)]定义自定义类的所有构造函数(2和3参数)]定义自定义类的所有构造函数(2和3参数)]非常感谢。在添加了这些构造函数之后,代码正在运行。非常感谢。在添加了这些构造函数之后,代码正在运行。非常感谢。在添加了这些构造函数之后,代码正在运行。非常感谢。在添加了这些构造函数之后,代码正在运行。非常感谢。在添加了这些构造函数之后,代码正在运行。非常感谢。在添加了这些构造函数之后,代码正在运行。非常感谢。在添加了这些构造函数之后,代码正在运行。非常感谢。在添加这些构造函数之后,代码现在可以工作了。