首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在android中叠加两张图片,设置一个图片视图

在android中叠加两张图片,设置一个图片视图
EN

Stack Overflow用户
提问于 2010-04-30 02:55:42
回答 3查看 150.3K关注 0票数 103

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

代码语言:javascript
复制
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);
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-04-30 03:27:44

您可以跳过复杂的画布操作,并使用LayerDrawable完全使用Drawables完成此操作。您有两个选择之一:您可以选择define it in XML然后简单地设置映像,或者您可以在代码中动态配置LayerDrawable

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

创建一个新的可绘制XML文件,我们将其命名为layer.xml

代码语言:javascript
复制
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/t" />
    <item android:drawable="@drawable/tt" />
</layer-list>

现在使用该可绘制的设置图像:

代码语言:javascript
复制
testimage.setImageDrawable(getResources().getDrawable(R.layout.layer));

解决方案#2 (动态):

代码语言:javascript
复制
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);

(我还没有测试过这段代码,所以可能有错误,但这个概要应该可以工作。)

票数 237
EN

Stack Overflow用户

发布于 2011-03-17 08:47:26

好的,就像你知道的,有一个叫做DroidDraw的程序。它可以帮助您绘制对象并在另一个对象上进行尝试。我尝试了你的解决方案,但我在较小的图像下有动画,所以不起作用。但是后来我试着把一个图像放在一个相对布局中,它应该首先在下面,然后在上面,我画了另一个图像,它应该是覆盖的,一切都很好。所以RelativeLayout,DroidDraw和你可以开始了:)很简单,没有任何形式的欺骗:)这里有一些代码给你:

该标志将在shazam背景图像的顶部。

代码语言:javascript
复制
<?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>
票数 10
EN

Stack Overflow用户

发布于 2019-11-14 03:33:32

这是我的解决方案:

代码语言:javascript
复制
    public Bitmap Blend(Bitmap topImage1, Bitmap bottomImage1, PorterDuff.Mode Type) {

        Bitmap workingBitmap = Bitmap.createBitmap(topImage1);
        Bitmap topImage = workingBitmap.copy(Bitmap.Config.ARGB_8888, true);

        Bitmap workingBitmap2 = Bitmap.createBitmap(bottomImage1);
        Bitmap bottomImage = workingBitmap2.copy(Bitmap.Config.ARGB_8888, true);

        Rect dest = new Rect(0, 0, bottomImage.getWidth(), bottomImage.getHeight());
        new BitmapFactory.Options().inPreferredConfig = Bitmap.Config.ARGB_8888;
        bottomImage.setHasAlpha(true);
        Canvas canvas = new Canvas(bottomImage);
        Paint paint = new Paint();

        paint.setXfermode(new PorterDuffXfermode(Type));

        paint.setFilterBitmap(true);
        canvas.drawBitmap(topImage, null, dest, paint);
        return bottomImage;
    }

用法:

代码语言:javascript
复制
imageView.setImageBitmap(Blend(topBitmap, bottomBitmap, PorterDuff.Mode.SCREEN));

代码语言:javascript
复制
imageView.setImageBitmap(Blend(topBitmap, bottomBitmap, PorterDuff.Mode.OVERLAY));

结果是:

覆盖模式:

屏幕模式:

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2739971

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档