2012-09-26 8 views
5

Ho due ImageViews. ImageView1 è un'immagine di sfondo e ImageView2 è un'immagine più piccola. La posizione di ImageView2 è da qualche parte nel mezzo dell'applicazione.Android: combina due immagini in sovrapposizione su un bmp con la posizione corretta

Vorrei unire questi due ImageView in un bitmap in modo che ImageView2 sia sopra ImageView1.

Il processo di unione funziona correttamente ma ImageView2 si trova sempre nell'angolo in alto a sinistra del file bmp.

Qui di seguito è il mio codice che ho usato per generare il 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(); 
    } 

Potete dirmi come posso regolare la posizione del file bitmap finale in modo che le ImageViews saranno nella stessa posizione in cui visualizzare sull'app?

Grazie.

+0

@Kintaro puoi aiutarmi in questa risposta come hai ottenuto questo compito? – Erum

risposta

3

è sufficiente creare uno FrameLayout e includere due ImageView s al suo interno. si sovrapporrà naturalmente alla prima immagine con la seconda.

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

è possibile applicare la gravità per centrare o altrimenti allineare le immagini.

+0

Grazie per la risposta. La mia domanda è che la bitmap finale (bmOverlay) contenga entrambe le immagini, ma l'immagine superiore è sempre nell'angolo in alto a sinistra della bitmap. Intendi che framelayout lo farà automaticamente per me (quando creo la bitmap da framelayout)? –

+0

se si inseriscono due bambini nel layout del frame, si sovrappongono esattamente, a meno che non si aggiungano altri attributi di layout che causano il non accadimento (come rendere il contenitore match_parent e l'impostazione di gravità differenti su ciascun bambino). –

+0

Grazie mille !!!! –

Problemi correlati