Android: объедините два оверлейных изображения с BMP с правильным положением

У меня два ImageView. ImageView1 – фоновое изображение, а ImageView2 – меньшее изображение. Позиция ImageView2 находится где-то посередине приложения.

Я хотел бы объединить эти два ImageView в растровое изображение, чтобы ImageView2 был поверх ImageView1.

Комбинированный процесс отлично работает, но ImageView2 всегда находится в верхнем левом углу файла BMP.

Ниже мой код, который я использовал для создания 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(); } 

Можете ли вы рассказать мне, как настроить положение финального файла растрового изображения, чтобы ImageViews находился в том же положении, что и в приложении?

Благодарю.

Просто создайте FrameLayout и FrameLayout в него два ImageView . Он, естественно, накладывает первое изображение на второе.

 <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> 

Вы можете применить гравитацию, чтобы центрировать или иным образом выравнивать изображения.