我是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
答案 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 bounds
和Show touches
,以便使用此特定应用进行更多调试。