无效后如何在画布中保留绘制的东西

时间:2013-12-28 18:27:05

标签: android view bitmap android-canvas ondraw

对于训练,我写的是像'achtung,die kurve'这样的游戏。现在,我只是简单地在屏幕上画出我的“kurve-snake”。转向我使用加速度计(事实上它确实有用)。我的自定义视图有自己的onDraw方法。

@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);

    Paint paint2 = new Paint();
    paint2.setAntiAlias(true);
    paint2.setStrokeWidth(mPlayer.getLine().getmSize());
    paint2.setColor(Color.GREEN);

    float x = mPlayer.getLine().getmPosX();
    float y = mPlayer.getLine().getmPosY();
    mLogic.movePlayer(mBitmapPoint, mPlayer, mSensorY);
    canvas.drawLine(x,y,mPlayer.getLine().getmPosX(), mPlayer.getLine().getmPosY(), paint2);
    invalidate();
}

它确实可以正常工作,但这样我就无法保持整行(只是它的实际片段)。

我尝试过其他方法:使用bitmap.setpixel(bresenhams alg)绘制线条,然后使用canvas.drawBitmap(...)绘制线条,但它无效。

我也试过了:

@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);

    Paint paint2 = new Paint();
    paint2.setAntiAlias(true);
    paint2.setStrokeWidth(mPlayer.getLine().getmSize());
    paint2.setColor(Color.GREEN);

    float x = mPlayer.getLine().getmPosX();
    float y = mPlayer.getLine().getmPosY();
    mLogic.movePlayer(mBitmapPoint, mPlayer, mSensorY);
    canvas.drawLine(x,y,mPlayer.getLine().getmPosX(), mPlayer.getLine().getmPosY(), paint2);
    invalidate();
    mBitmapPoint = getDrawingCache();

}

但它给出了错误。知道如何实现这个目标吗?

2 个答案:

答案 0 :(得分:0)

我认为你需要修改你的绘图代码看起来更像这样:

Point start = myPlayer.getLine().getStartPoint();

for(Point p: myPlayer.getLine().getPoints()) {
   if(start == p) {
      continue;
   }
   canvas.drawLine(start.x,start.y,p.x,p.y,    paint2);
   start = p;
}

你需要创建一个代表你蛇的“关节”的点列表,那里有很多我不会放在这里的代码,但这种方法会为你画出你的线。

答案 1 :(得分:0)