Solución:
Puede omitir la compleja manipulación de Canvas y hacer esto completamente con Drawables, usando LayerDrawable
. Tiene una de dos opciones: puede definirlo en XML y luego simplemente configurar la imagen, o puede configurar un LayerDrawable
dinámicamente en código.
Solución n. ° 1 (a través de XML):
Cree un nuevo archivo XML dibujable, llamémoslo 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>
Ahora configure la imagen usando ese Drawable:
testimage.setImageDrawable(getResources().getDrawable(R.layout.layer));
Solución # 2 (dinámica):
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);
(No he probado este código, por lo que puede haber un error, pero este esquema general debería funcionar).
ok solo para que sepas que hay un programa que se llama DroidDraw. Puede ayudarte a dibujar objetos y probarlos uno encima del otro. Probé su solución, pero tenía una animación debajo de la imagen más pequeña, por lo que no funcionó. Pero luego intenté colocar una imagen en un diseño relativo que se supone que debe estar debajo primero y luego, encima de eso, dibujé la otra imagen que se supone que se superpondrá y todo funcionó muy bien. Así que RelativeLayout, DroidDraw y ya está listo 🙂 Simple, sin ningún tipo de trampa 🙂 y aquí hay un poco de código para usted:
El logo estará encima de la imagen de fondo de 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="https://foroayuda.es/@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>
Puede usar el siguiente código para resolver el problema o descargar demo aquí
Crea dos funciones para manejar cada una.
Primero, se dibuja el lienzo y las imágenes se dibujan una encima de la otra desde el punto (0,0)
Al hacer clic en el botón
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);
}
Función para crear una superposición.
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;
}
Lee mas