1.尝试练习实现自定义TextView时,运行报错
代码及xml如下:
@SuppressLint("AppCompatCustomView")
public class MyTextView extends TextView {
private Paint mPaint1;
private Paint mPaint2;
public MyTextView(Context context) {
super(context);
}
@Override
protected void onDraw(Canvas canvas) {
mPaint1 = new Paint();
mPaint1.setColor(Color.GREEN);
mPaint1.setStyle(Paint.Style.FILL);
mPaint2 = new Paint();
mPaint2.setColor(Color.YELLOW);
mPaint2.setStyle(Paint.Style.FILL);
canvas.drawRect(0,0,getMeasuredWidth(),getMeasuredHeight(),mPaint1);
canvas.drawRect(0,0,getMeasuredWidth() - 5,getMeasuredHeight() - 5,mPaint2);
canvas.save();
canvas.translate(10,0);
super.onDraw(canvas);
canvas.restore();
}
}
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.example.myapplication.MyTextView
android:layout_width="100dp"
android:layout_height="wrap_content"
android:layout_marginLeft="100dp"
android:layout_marginTop="100dp"
android:text="hello world!"
android:textColor="#ff000000"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>
2.问题及修改
总之抛出这种异常的原因有可能是必须实现的构造器没有实现:须实现三个构造函数
public class MyTextView extends TextView {
public MyTextView(Context context) {
super(context);
}
public MyTextView(Context context, AttributeSet attributeSet)
{
super(context,attributeSet);
}
public MyTextView(Context context, AttributeSet attributeSet, int defStyle)
{
super(context,attributeSet,defStyle);
}
...
}
3.效果