在android中覆盖两个图像以设置imageview

Joh*_*ohn 98 android image

我试图在我的应用程序中叠加两个图像,但它们似乎在我的canvas.setBitmap()线上崩溃.我究竟做错了什么?

private void test() {
    Bitmap mBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.t);
    Bitmap mBitmap2 = BitmapFactory.decodeResource(getResources(), R.drawable.tt);
    Bitmap bmOverlay = Bitmap.createBitmap(mBitmap.getWidth(), mBitmap.getHeight(), mBitmap.getConfig());
    Canvas canvas = new Canvas();
    canvas.setBitmap(bmOverlay);
    canvas.drawBitmap(mBitmap, new Matrix(), null);
    canvas.drawBitmap(mBitmap2, new Matrix(), null);
    testimage.setImageBitmap(bmOverlay);
}
Run Code Online (Sandbox Code Playgroud)

Dan*_*Lew 231

您可以跳过复杂的Canvas操作,并使用Drawables完全执行此操作LayerDrawable.您有两种选择之一:您可以在XML中定义它,然后只需设置图像,或者您可以LayerDrawable在代码中动态配置.

解决方案#1(通过XML):

创建一个新的Drawable XML文件,我们称之为layer.xml:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/t" />
    <item android:drawable="@drawable/tt" />
</layer-list>
Run Code Online (Sandbox Code Playgroud)

现在使用Drawable设置图像:

testimage.setImageDrawable(getResources().getDrawable(R.layout.layer));
Run Code Online (Sandbox Code Playgroud)

解决方案#2(动态):

Resources r = getResources();
Drawable[] layers = new Drawable[2];
layers[0] = r.getDrawable(R.drawable.t);
layers[1] = r.getDrawable(R.drawable.tt);
LayerDrawable layerDrawable = new LayerDrawable(layers);
testimage.setImageDrawable(layerDrawable);
Run Code Online (Sandbox Code Playgroud)

(我没有测试过这段代码,所以可能会出现错误,但这个大纲应该有效.)

  • 抱歉,你抓住代码后不久就编辑了它 (5认同)

dro*_*ter 10

好的,所以你知道那里有一个名为DroidDraw的程序.它可以帮助您绘制对象并在另一个上面尝试它们.我尝试了你的解决方案,但我在较小的图像下有动画,所以不起作用.但后来我尝试将一个图像放在一个相对布局中,假设首先放在第一个布局之上,然后在其上面绘制另一个假设要叠加的图像,一切都很好.所以RelativeLayout,DroidDraw和你很好去:)简单,没有任何类型的jiggery pockery :)这里有一些代码为ya:

徽标将位于shazam背景图像之上.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
android:id="@+id/widget30"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android"
>
<ImageView
android:id="@+id/widget39"
android:layout_width="219px"
android:layout_height="225px"
android:src="@drawable/shazam_bkgd"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true"
>
</ImageView>
<ImageView
android:id="@+id/widget37"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/shazam_logo"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true"
>
</ImageView>
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)


Dan*_*syo 5

您可以使用下面的代码来解决问题或在此处下载演示

创建两个函数来处理每个函数。

首先,绘制画布,并从点(0,0)开始在彼此之上绘制图像

在按钮上单击

public void buttonMerge(View view) {

        Bitmap bigImage = BitmapFactory.decodeResource(getResources(), R.drawable.img1);
        Bitmap smallImage = BitmapFactory.decodeResource(getResources(), R.drawable.img2);
        Bitmap mergedImages = createSingleImageFromMultipleImages(bigImage, smallImage);

        img.setImageBitmap(mergedImages);
    }
Run Code Online (Sandbox Code Playgroud)

创建覆盖的功能。

private Bitmap createSingleImageFromMultipleImages(Bitmap firstImage, Bitmap secondImage){

    Bitmap result = Bitmap.createBitmap(firstImage.getWidth(), firstImage.getHeight(), firstImage.getConfig());
    Canvas canvas = new Canvas(result);
    canvas.drawBitmap(firstImage, 0f, 0f, null);
    canvas.drawBitmap(secondImage, 10, 10, null);
    return result;
}
Run Code Online (Sandbox Code Playgroud)

阅读更多