Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/179.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在画布上绘制两幅相同图像时出现问题_Android_Math_Canvas_Surfaceview - Fatal编程技术网

Android 在画布上绘制两幅相同图像时出现问题

Android 在画布上绘制两幅相同图像时出现问题,android,math,canvas,surfaceview,Android,Math,Canvas,Surfaceview,我这里有一个问题,当我有2摩尔的时候,它会崩溃,但如果只有一摩尔,它就不会崩溃 private int randX(){ int x = (int) Math.round((Math.random()*CollierSurface.getWidth())); if (x<CollierSurface.getWidth()) randX(); return x; } private int randY(){ int y = (int) Math.round(

我这里有一个问题,当我有2摩尔的时候,它会崩溃,但如果只有一摩尔,它就不会崩溃

private int randX(){
    int x = (int) Math.round((Math.random()*CollierSurface.getWidth()));
    if (x<CollierSurface.getWidth()) randX();
    return x;
}

private int randY(){
    int y = (int) Math.round((Math.random()*CollierSurface.getHeight()));
    if (y<CollierSurface.getWidth()) randY();
    return y;
}

private void DrawMoles() {
    if (!_canDraw) return;
    try {
        CollierCanvas = CollierHolder.lockCanvas();
            Drawable background = getResources().getDrawable(R.drawable.collierabove);
            background.setBounds(0, 0, CollierSurface.getWidth(), CollierSurface.getHeight());
            background.draw(CollierCanvas);
            newMole(randX(), randY(), mole1);
            newMole(randX(), randY(), mole2);
    } catch (SurfaceHolder.BadSurfaceTypeException e) {

    } finally {
        if (CollierCanvas != null){
        CollierHolder.unlockCanvasAndPost(CollierCanvas);
        }
    }
}

private void newMole(int x, int y, Drawable mole){
    mole = getResources().getDrawable(R.drawable.mole);
    mole.mutate().setBounds((int)x-(mole.getIntrinsicWidth()), 
                        (int)y-(mole.getIntrinsicHeight()), 
                        (int)x+(mole.getIntrinsicWidth()), 
                        (int)y+(mole.getIntrinsicHeight()));
    mole.draw(CollierCanvas);
}

这是随机的x和y花费的时间太长了

我现在就用这个

private int randX(){
    Random random = new Random();
    int x = random.nextInt(CollierSurface.getWidth());
    return x;
}

private int randY(){
    Random random = new Random();
    int y = random.nextInt(CollierSurface.getHeight());
    return y;
}

请把撞车的日志贴出来,我搞不懂!我一直在试图弄清楚除了idk之外,是否有异常或其他原因。
启动超时已过期,放弃唤醒锁表示代码花费的时间太长。也许有一个循环?你的应用程序是否进入了那个障碍?
private int randX(){
    Random random = new Random();
    int x = random.nextInt(CollierSurface.getWidth());
    return x;
}

private int randY(){
    Random random = new Random();
    int y = random.nextInt(CollierSurface.getHeight());
    return y;
}