【问题标题】:Android Drawing App CrashesAndroid 绘图应用程序崩溃
【发布时间】:2012-05-18 21:58:08
【问题描述】:

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

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();
    }
}

}

【问题讨论】:

    标签: java android surfaceview


    【解决方案1】:

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

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

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

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

    解决随机间歇性问题是工作的一部分。从中学习并玩得开心。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-02-13
      • 1970-01-01
      • 2012-10-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多