2

目前我正在编写一个程序,该程序应该将图像添加到画布,然后将该画布添加到相对布局。我遇到的问题是,当我调用它时,会显示布局,但不会在布局上绘制画布。

canvas = (RelativeLayout) findViewById(R.id.canvasLayout);                  
imageCanvas = new Canvas();
mainImage = BitmapFactory.decodeResource(getResources(), R.drawable.image);

imageCanvas.drawBitmap(mainImage, 50, 50, null);

imageCanvas.drawColor(Color.BLACK);
canvas.draw(imageCanvas);

这是试图将图像添加到画布然后将画布添加到布局的代码。

我完全不知道该怎么做才能解决这个问题。

4

3 回答 3

4

您正在使用的 canvas.draw(imageCanvas) 调用实际上将画布(RelativeLayout)绘制到 imageCanvas(Canvas 对象)上 - 可能不是您想要的。我建议有几种方法可以将drawable放到RelativeLayout上:

第一个是创建一个 ImageView,将其图像设置为您的可绘制对象,然后将其添加到布局中。根据您是否希望在运行时动态添加图像,您实际上可以在 xml 图形设计器中执行此操作。这可能是最好的方法,因为它可以让您控制图像的大小以及图像的缩放/裁剪方式。

如果您想为布局设置背景,我相信您实际上可以将 RelativeLayout 的 Background 属性直接设置为可绘制对象 - 虽然这不允许对图像的缩放进行太多控制。

最后,为了完全控制如何绘制 RelativeLayout,您可以在任何视图中重写 OnDraw 方法。android系统在需要刷新视图时调用此方法。如果您最终使用它,创建一个自定义视图类,然后将其放置在RelativeLayout 中可能会更好。

于 2012-08-17T12:08:52.190 回答
2
canvas = (RelativeLayout) findViewById(R.id.canvasLayout);                  
imageCanvas = new Canvas();

mainImage = BitmapFactory.decodeResource(getResources(), R.drawable.image);

imageCanvas.drawBitmap(mainImage, 50, 50, null);



canvas.addView(imageCanvas);
于 2012-08-24T13:53:34.710 回答
1

以下将以编程方式从位图资源中将图像添加到您的布局中,这听起来像是您想要做的。例如,如果您需要在该图像上绘图,则需要通过扩展 ImageView 并覆盖 onDraw() 来制作自定义组件。

canvas = (RelativeLayout) findViewById(R.id.canvasLayout);                  
imageView = new ImageView(getApplicationContext());
mainImage = BitmapFactory.decodeResource(getResources(), R.drawable.image);
imageView.setImageBitmap( mainImage );
canvas.addView( imageView );
于 2012-08-17T12:06:40.317 回答