2012-09-26 62 views
5

我有兩個ImageViews。 ImageView1是一個背景圖像,ImageView2是一個較小的圖像。 ImageView2的位置位於應用程序的中間位置。Android:將兩個疊加圖像組合到一個正確位置的bmp中

我想將這兩個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將在相同的位置,因爲它在應用上顯示?

謝謝。

+0

@Kintaro你能幫我解答這個問題嗎?你是如何完成這項任務的? – Erum

回答

3

只需創建一個FrameLayout,並在其中包含兩個ImageView s。它會自然覆蓋第一張圖片和第二張圖片。

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

您可以將重力應用於居中或對齊圖像。

+0

感謝您的回覆。我的問題是,最終位圖(bmOverlay)包含兩個imageViews,但頂部imageViews始終位於左上角的位圖。 你的意思是framelayout會自動做到這一點(當我從framelayout創建位圖)? –

+0

如果您將兩個孩子放在框架佈局中,它們將完全重疊,除非您添加其他導致不發生的佈局屬性(如使容器match_parent,併爲每個孩子設置不同的重力)。 –

+0

非常感謝!!!! –

相關問題