android绘制位图在另一个之上

时间:2014-09-05 11:25:14

标签: android bitmap

在某些情况下,我必须在另一个上面添加一个位图。但我的代码不起作用。我当然认为,我做的不对,但我不知道如何做到这一点。

之后我必须将我的Bitmap转换为Picture对象,然后将我的Picture对象添加到我的MarkerOption对象。

这是我的代码:

                Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.lifr);
                Bitmap bmp2 = BitmapFactory.decodeResource(getResources(), R.drawable.manche_a_air);
                Bitmap bmOverlay = Bitmap.createBitmap(bmp.getWidth(), bmp.getHeight(), bmp.getConfig());
                Canvas canvas = new Canvas(bmOverlay);
                canvas.drawBitmap(bmp, 0.0f, 0.0f, null);
                canvas.drawBitmap(bmp2, bmp.getWidth(), bmp.getHeight() / 2, null);
                markerOptions.icon(BitmapDescriptorFactory.fromBitmap(bmOverlay));

                return markerOptions;

如果有人有想法?提前谢谢。

1 个答案:

答案 0 :(得分:0)

我会创建一个FrameLayout(子视图在堆栈中绘制,最近添加的子项位于顶部),第二个布局具有透明背景。注意,第二位图也可以是部分透明的。如果我需要在运行时移动第二个图像,我会以编程方式更改布局参数。

排序:

<FrameLayout ...>
  <LinearLayout  ...>
     <!-- the 1st bitmap goes here -->
  </LinearLayout>
  <LinearLayout android:background="#80000000" ...> <!-- semi-transparent -->
     <View android:layout_width="80px" .../> <!-- just padding -->
     <!-- the 2nd bitmap goes here -->
     ...
  </LinearLayout>
</FrameLayout>

请注意,为了精确定位,您可以在垂直LinearLayout中使用水平LinearLayout。

以编程方式更改位置有点棘手,您可能需要拦截onGlobalLayout()。

当然,这对于UI来说是可以的,但对游戏来说可能太慢了。