我试图在我的应用程序中叠加两个图像,但它们似乎在我的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)
(我没有测试过这段代码,所以可能会出现错误,但这个大纲应该有效.)
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)
您可以使用下面的代码来解决问题或在此处下载演示
创建两个函数来处理每个函数。
首先,绘制画布,并从点(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)
| 归档时间: |
|
| 查看次数: |
136263 次 |
| 最近记录: |