Android绘图应用程序崩溃

时间:2016-06-01 22:50:20

标签: java android

我是Android编程的新手,并从一个简单的绘图应用开始。我经过大量浏览后找到并整理了一些代码,但代码似乎不起作用。该应用程序打开时有一个白色屏幕,但在我触摸和拖动时什么都不做。没有线条或任何东西可见。只是白色的屏幕。

这是代码。

package com.drawing.emeraldsoul.drawingapp;

import android.app.Activity;
import android.content.res.Resources;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;

class MyView extends View {
// setup initial color
private final int paintColor = Color.BLACK;
// defines paint and canvas
private Paint drawPaint;

private Path path = new Path();

public MyView(Context context, AttributeSet attrs) {
    super(context, attrs);
    setFocusable(true);
    setFocusableInTouchMode(true);
    setupPaint();
}

// Setup paint with color and stroke styles
private void setupPaint() {
    drawPaint = new Paint();
    drawPaint.setColor(paintColor);
    drawPaint.setAntiAlias(true);
    drawPaint.setStrokeWidth(5);
    drawPaint.setStyle(Paint.Style.STROKE);
    drawPaint.setStrokeJoin(Paint.Join.ROUND);
    drawPaint.setStrokeCap(Paint.Cap.ROUND);
}

@Override
protected void onDraw(Canvas canvas) {
    canvas.drawPath(path, drawPaint);
}

@Override
public boolean onTouchEvent(MotionEvent event) {
    float pointX = event.getX();
    float pointY = event.getY();
    // Checks for the event that occurs
    switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
            path.moveTo(pointX, pointY);
            return true;
        case MotionEvent.ACTION_MOVE:
            path.lineTo(pointX, pointY);
            break;
        default:
            return false;
    }
    // Force a view to draw again
    postInvalidate();
    return true;
}
}

public class MainActivity extends Activity {
    public MainActivity() {
        super();
    }
}

主文件是MainActivity,因此我添加了一个带有空构造函数的公共类。如果我尝试在从View扩展的MainActivity类中添加整个绘图代码,那么应用程序崩溃,甚至不会启动,并显示“找不到空构造函数”的错误。所以我用这种方式编码。我不确定这是不对的。

有谁能告诉我哪里出错了?

非常感谢,提前, Esash

2 个答案:

答案 0 :(得分:0)

  

应用程序崩溃,甚至没有启动,并显示“找不到空构造函数”的错误。

我认为这需要View类的空构造函数。

public MyView() { 
    // TODO: Maybe place something here?
}

public MyView(Context context, AttributeSet attrs) {
    super(context, attrs);
    setFocusable(true);
    setFocusableInTouchMode(true);
    setupPaint();
}

但真正的问题可能在于你的活动没有onCreate。而且无论如何都不需要空构造函数。

public class MainActivity extends Activity {

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.YourLayoutWithMyView); // TODO: Put your layout here
    }

}

答案 1 :(得分:0)

确保将MyView包含在正在呈现的应用的布局文件中。
在您的布局文件中包含MyView的实例后,您可以转到测试设备上的Settings > Developer options并启用Show layout boundsShow touches,以便使用此特定应用进行更多调试。