gpt4 book ai didi

java - Android 绘图应用程序崩溃

转载 作者:行者123 更新时间:2023-11-30 11:44:43 27 4
gpt4 key购买 nike

我正在制作一个绘图应用程序,当我按下时,应用程序随机崩溃。我不知道如何修复它,也不知道从哪里开始。不知道是名单问题还是时间问题,还是别的什么。这是我的代码:

package com.orangewhales.paint.views;

import java.util.ArrayList;
import java.util.List;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.Paint.Style;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceHolder.Callback;
import android.view.SurfaceView;

public class PaintView extends SurfaceView implements Callback {

boolean run = true;
Thread tUpdate;
public List<PaintPath> paths = new ArrayList<PaintPath>();

public Paint stroke = new Paint();

@Override
public void draw(Canvas canvas) {
// TODO Auto-generated method stub
super.draw(canvas);

canvas.drawRGB(255, 255, 255);

for (PaintPath path : paths) {
canvas.drawPath(path.path, path.paint);
}
}

@Override
public boolean onTouchEvent(MotionEvent event) {
// TODO Auto-generated method stub
switch(event.getAction()) {
case MotionEvent.ACTION_DOWN:
Path current = new Path();
current.moveTo(event.getX(), event.getY());
paths.add(new PaintPath(current, stroke));
break;

case MotionEvent.ACTION_MOVE:
PaintPath path = paths.get(paths.size() - 1);
path.path.lineTo(event.getX(), event.getY());
break;
}


return true;
}

public PaintView(Context context, AttributeSet attrs) {
super(context, attrs);

stroke.setStyle(Style.STROKE);
stroke.setColor(Color.BLACK);
stroke.setStrokeWidth(10);

tUpdate = new Thread() {

public void run() {
while (run) {
Canvas c = getHolder().lockCanvas();
draw(c);
getHolder().unlockCanvasAndPost(c);

update();

try {
sleep(10);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

};

getHolder().addCallback(this);
}

public void update() {
// TODO Auto-generated method stub

}

@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
// TODO Auto-generated method stub

}

@Override
public void surfaceCreated(SurfaceHolder holder) {
// TODO Auto-generated method stub
tUpdate.start();
}

@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// TODO Auto-generated method stub
run = false;

try {
tUpdate.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}

}

最佳答案

我已经有一段时间没有碰过我的 Android SDK 了。所以我将从一个问题开始。

您说当按下 GUI 时应用会随机崩溃。在 onTouchEvent 函数中,哪个 Action 先发生,ACTION_DOWN 还是 ACTION_MOVE?我希望它定义明确,但我们不能假设。

我发现函数“PaintPath path = paths.get(paths.size() - 1)”中的代码很可疑,因为 paths.size 可以是 0,无论如何在开头。

我认为密切监视 onTouchEvent 函数是个好主意,可以使用调试器。如果您没有其他问题,请记录消息。

修复随机间歇性问题是工作的一部分。从中学习并从中获得乐趣。

关于java - Android 绘图应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10660234/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com