我试图运行并编译到我的手机中这段代码:
public class SingleTouchEventView extends View {
private Paint paint = new Paint();
private Path path = new Path();
public SingleTouchEventView(Context context, AttributeSet attrs) {
super(context, attrs);
paint.setAntiAlias(true);
paint.setStrokeWidth(6f);
paint.setColor(Color.BLACK);
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeJoin(Paint.Join.ROUND);
}
@Override
protected void onDraw(Canvas canvas) {
canvas.drawPath(path, paint);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
float eventX = event.getX();
float eventY = event.getY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
path.moveTo(eventX, eventY);
return true;
case MotionEvent.ACTION_MOVE:
path.lineTo(eventX, eventY);
break;
case MotionEvent.ACTION_UP:
// nothing to do
break;
default:
return false;
}
// Schedules a repaint.
invalidate();
return true;
}
}
但是它崩溃了,我的logcat说了以下内容:
无法启动类......没有空构造函数
任何线索我做错了什么?
答案 0 :(得分:1)
可能是您正在尝试创建如下对象...
SingleTouchEventView view = new SingleTouchEventView ();
但是你没有任何空的构造函数。如果您想暂时解决问题,请在Constructor
课程中创建一个空的SingleTouchEventView
,如下所示...
public SingleTouchEventView() {
}
当你extends View
上课时,你就不能拥有空的构造函数。因此,上述构造函数将通过错误说明......
Implicit super constructor View() is undefined. Must explicitly invoke another constructor
所以,你必须至少通过构造函数传递Context
...现在,你应该用Constructor
创建另一个Context
,如下所示......
public SingleTouchEventView(Context context) {
super(context);
}
public SingleTouchEventView(Context context, AttributeSet attrs) {
super(context, attrs);
}
当你创建一个SingleTouchEventView
类的对象时,你初始化如下......
SingleTouchEventView view = new SingleTouchEventView (getApplicationContext());