Java can';t实例化类;没有空构造函数
我有下面的代码,我想做一个划痕效果:Java can';t实例化类;没有空构造函数,java,android,Java,Android,我有下面的代码,我想做一个划痕效果: public class Test extends View { public Test(Context context, AttributeSet attrs) { super(context, attrs); // TODO Auto-generated constructor stub } private boolean isMove = false; private Bitmap bit
public class Test extends View {
public Test(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
}
private boolean isMove = false;
private Bitmap bitmap = null;
private Bitmap frontBitmap = null;
private Path path;
private Canvas mCanvas;
private Paint paint;
protected void onDraw(Canvas canvas) {
if (mCanvas == null) {
EraseBitmp();
}
canvas.drawBitmap(bitmap, 0, 0, null);
mCanvas.drawPath(path,paint);//Draw a path
super.onDraw(canvas);
}
public void EraseBitmp() {
bitmap = Bitmap.createBitmap(getWidth(),getHeight(), Bitmap.Config.ARGB_4444);
frontBitmap = CreateBitmap(Color.GRAY,getWidth(),getHeight());//The production of grey.
//Set the brush style
paint = new Paint();
paint.setStyle(Paint.Style.STROKE);//Set the brush style: Hollow
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));//Display mode settings when photo cross
paint.setAntiAlias(true);//Anti according to tooth
paint.setDither(true);//Anti jitter
paint.setStrokeJoin(Paint.Join.ROUND);//Set the joint appearance, ROUND arc
paint.setStrokeCap(Paint.Cap.ROUND);
paint.setStrokeWidth(20);//Set the stroke width
path = new Path();
mCanvas = new Canvas(bitmap);//Set up a band picture of canvas
mCanvas.drawBitmap(frontBitmap, 0, 0,null);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
// TODO Auto-generated method stub
float ax = event.getX();
float ay = event.getY();
if (event.getAction() == MotionEvent.ACTION_DOWN) {
isMove = false;
path.reset();
path.moveTo(ax, ay);
invalidate();
return true;
} else if (event.getAction() == MotionEvent.ACTION_MOVE) {
isMove = true;
path.lineTo(ax,ay);
invalidate();
return true;
}
return super.onTouchEvent(event);
}
public Bitmap CreateBitmap(int color,int width, int height) {
int[] rgb = new int [width * height];
for (int i=0;i<rgb.length;i++) {
rgb[i] = color;
}
return Bitmap.createBitmap(rgb, width, height,Config.ARGB_8888);
}
}
公共类测试扩展视图{
公共测试(上下文、属性集属性){
超级(上下文,attrs);
//TODO自动生成的构造函数存根
}
私有布尔值isMove=false;
私有位图=空;
私有位图frontBitmap=null;
专用路径;
私人帆布mCanvas;
私人油漆;
受保护的void onDraw(画布){
如果(mCanvas==null){
擦除bitmp();
}
drawBitmap(位图,0,0,null);
绘制路径(路径,绘制);//绘制路径
super.onDraw(帆布);
}
公共无效位(){
bitmap=bitmap.createBitmap(getWidth(),getHeight(),bitmap.Config.ARGB_4444);
frontBitmap=CreateBitmap(Color.GRAY,getWidth(),getHeight());//灰色的生成。
//设置笔刷样式
油漆=新油漆();
paint.setStyle(paint.Style.STROKE);//设置笔刷样式:空心
paint.setXfermode(新PorterDuffXfermode(PorterDuff.Mode.CLEAR));//照片交叉时显示模式设置
paint.setAntiAlias(true);//根据牙齿设置Anti
paint.setDither(true);//抗抖动
paint.setStrokeJoin(paint.Join.ROUND);//设置接头外观,圆弧
油漆固定行程盖(油漆固定行程盖圆形);
paint.setStrokeWidth(20);//设置笔划宽度
路径=新路径();
mCanvas=新建画布(位图);//设置画布的带状图片
drawBitmap(frontBitmap,0,0,null);
}
@凌驾
公共布尔onTouchEvent(运动事件){
//TODO自动生成的方法存根
float ax=event.getX();
float ay=event.getY();
if(event.getAction()==MotionEvent.ACTION\u向下){
isMove=假;
path.reset();
路径移动到(ax,ay);
使无效();
返回true;
}else if(event.getAction()==MotionEvent.ACTION\u MOVE){
isMove=真;
线路到(ax,ay);
使无效();
返回true;
}
返回super.onTouchEvent(事件);
}
公共位图创建位图(整数颜色、整数宽度、整数高度){
int[]rgb=新int[宽度*高度];
对于(inti=0;i您只有1个构造函数,可以创建其他构造函数,这样就可以了
public Test(Context context) {
super(context);
}
public Test(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
public Test(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
您只有1个构造函数,可以创建其他构造函数,这样就可以了
public Test(Context context) {
super(context);
}
public Test(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
public Test(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
您的测试类只有一个构造函数
这:
public Test(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
}
您需要默认的构造函数(构造函数不带参数)您的测试类只有一个构造函数
这:
public Test(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
}
您需要默认值(构造函数不带参数)
当我想编译时,is给出了上面的错误:无法实例化类;没有空构造函数我添加了一个空构造函数,但没有成功
您发布的代码中没有必需的构造函数。您只有一个,而您需要三个:
public Test(Context context) {
super(context);
}
public Test(Context context, AttributeSet attrs) {
super(context, attrs);
}
public Test(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
编辑
测试;没有空构造函数
空构造函数是这样的:
public Test() {}
然而,它闻起来你试图以错误的方式使用这个视图。你难道不想把它当作碎片来使用吗
当我想编译时,is给出了上面的错误:无法实例化类;没有空构造函数我添加了一个空构造函数,但没有成功
您发布的代码中没有必需的构造函数。您只有一个,而您需要三个:
public Test(Context context) {
super(context);
}
public Test(Context context, AttributeSet attrs) {
super(context, attrs);
}
public Test(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
编辑
测试;没有空构造函数
空构造函数是这样的:
public Test() {}
然而,它闻起来你试图以错误的方式使用这个视图。难道你不想利用它作为片段吗?03-10 12:11:38.267:E/AndroidRuntime(11990):原因:java.lang.InstantiationException:无法实例化类com.example.winter.carrefour.Test;没有空构造函数您没有尝试将其用作片段吗?显示使用此测试视图的布局您是否确定发布的代码与正在使用的代码相同?可能您复制了类文件并编辑了副本?你必须用整个类代码更新问题,包括包
。事实上,你可以去掉构造函数以外的任何东西,因为这是不相关的。这是我使用的全部代码。只有那个类和xml。不,这不是你类文件的全部内容。03-10 12:11:38.267:E/AndroidRuntime(11990):原因:java.lang.InstantiationException:无法实例化类com.example.winter.carrefour.Test;没有空构造函数您没有尝试将其用作片段吗?显示使用此测试视图的布局您是否确定发布的代码与正在使用的代码相同?可能您复制了类文件并编辑了副本?您必须使用整个类代码(包括包
)更新问题。事实上,您可以去除除构造函数以外的任何内容,因为这是不相关的。这是我使用的全部代码。只有该类和xml。不,这不是类文件的全部内容。