0

我正在尝试在画布上显示位图(或位图创建画布,因为它们似乎是两个不同的东西?)。感谢我昨天在这里得到的一些非常有用的建议,最好的方法似乎是首先创建我自己的自定义视图,然后在其中实现我需要的所有功能。有人建议我不需要为此扩展surfaceView,因为我只需要非常简单的功能,例如平移/捏拉缩放/单击图像,所以我正在扩展View。

这段代码的问题是,即使在我运行它之前,当我在 Eclipse 中单击此视图的图形布局时,我也会收到 StackOverflowError。我只能假设这是因为该行this.draw(canvas);被递归调用或其他什么。当我注释掉该行并取消注释它上面的行时,canvas.drawBitmap(bmp, 0, 0, paint);图像在图形布局中完美显示,但是当我运行应用程序时,我得到强制关闭。

public class CanvasView extends View {

Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.testmapbmp);
Paint paint = new Paint();
Canvas c = new Canvas(bmp);

public CanvasView(Context context, AttributeSet attrs) {
    super(context, attrs);
} 

@Override
protected void onDraw(Canvas canvas) {
    //super.onDraw(canvas); 
    //canvas.drawBitmap(bmp, 0, 0, paint);
    this.draw(canvas); 
    //canvas.save();
}

谁能向我解释为什么会这样?这是我之前发布的问题的链接,以防它有助于阐明我想要实现的目标:在 Surfaceview 中的画布上显示位图

非常感谢任何和所有建议!

4

2 回答 2

1

this.draw(canvas)调用onDraw().

于 2013-03-26T13:29:36.037 回答
0

这段代码最终会递归调用 onDraw(),从而导致堆栈内存被吃掉。

于 2013-03-26T13:37:38.023 回答