在Android中创建自定义视图时出现运行时错误
我是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
我的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参数)]非常感谢。在添加了这些构造函数之后,代码正在运行。非常感谢。在添加了这些构造函数之后,代码正在运行。非常感谢。在添加了这些构造函数之后,代码正在运行。非常感谢。在添加了这些构造函数之后,代码正在运行。非常感谢。在添加了这些构造函数之后,代码正在运行。非常感谢。在添加了这些构造函数之后,代码正在运行。非常感谢。在添加了这些构造函数之后,代码正在运行。非常感谢。在添加这些构造函数之后,代码现在可以工作了。