Android: Combina dos vistas de imagen superpuestas en un bmp con la posición correcta

Tengo dos ImageViews. ImageView1 es una imagen de fondo y ImageView2 es una imagen más pequeña. La posición de ImageView2 está en algún lugar en el centro de la aplicación.

Me gustaría combinar esos dos ImageView en un mapa de bits para que ImageView2 se encuentra en la parte superior de ImageView1.

El proceso de combinación funciona bien, pero ImageView2 siempre está en la esquina superior izquierda del archivo bmp.

A continuación se muestra el código que usé para generar el bmp:

ImageView iv = (ImageView)findViewById(R.id.imageView1); ImageView iv2 = (ImageView)findViewById(R.id.imageView2); File rootPath = new File(Environment.getExternalStorageDirectory(), "testmerge"); if (!rootPath.exists()) { rootPath.mkdirs(); } Toast.makeText(this, rootPath.getPath(), Toast.LENGTH_LONG).show(); File dataFile = new File(rootPath, "picture.png"); iv.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED), MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)); iv.layout(0, 0, iv.getMeasuredWidth(), iv.getMeasuredHeight()); iv.setDrawingCacheEnabled(true); Bitmap b1 = Bitmap.createBitmap(iv.getDrawingCache()); iv.setDrawingCacheEnabled(false); iv2.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED), MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)); iv2.layout(0, 0, iv2.getMeasuredWidth(), iv2.getMeasuredHeight()); iv2.setDrawingCacheEnabled(true); Bitmap b2 = Bitmap.createBitmap(iv2.getDrawingCache()); iv2.setDrawingCacheEnabled(false); Bitmap bmOverlay = Bitmap.createBitmap(b1.getWidth(), b1.getHeight(), b1.getConfig()); Canvas canvas = new Canvas(bmOverlay); Paint paint = new Paint(); paint.setAntiAlias(true); paint.setFilterBitmap(true); paint.setDither(true); canvas.drawBitmap(b1, 0, 0, null); canvas.drawBitmap(b2, 0, 0, null); try { FileOutputStream out = new FileOutputStream(dataFile, false); bmOverlay.compress(CompressFormat.PNG, 95, out); } catch (IOException e) { e.printStackTrace(); } 

¿Puede decirme cómo puedo ajustar la posición del archivo de mapa de bits final para que el ImageViews se encuentre en la misma posición que se muestra en la aplicación?

Gracias.

Sólo cree un FrameLayout , e incluya dos ImageView s dentro de él. Naturalmente se superpondrá la primera imagen con la segunda.

 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" > <ImageView android:id="@+id/main_image" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/main" /> <ImageView android:id="@+id/overlay_image" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/overlay" /> </FrameLayout> 

Puede aplicar gravidades para centrar o alinear las imágenes.

  • Android Crear imagen "Ghost" (Touch-through)
  • Las imágenes transparentes de OpenGL tienen negro en ellas
  • ¿Cómo almacenar en caché android.graphics.path o Bitmap cuando se usan Overlays?
  • Superposición transparente GLSurfaceview en la vista existente en android?
  • Servicio con Overlay - presione el botón de retroceso
  • Cómo obtener fechas de la base de datos y comprobar si se solapan?
  • Cómo forzar mezcla alfa en un videoview
  • Android - los estados de la superposición automática táctil / resaltado del estado de la imagen
  • Barra de navegación de Android superpuesta a mi vista
  • ¿Cómo capturar eventos onTouch en dos vistas superpuestas?
  • Dibujo de una línea / ruta en Google Maps
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.