2012-09-26 3 views
5

Ich habe zwei ImageViews. ImageView1 ist ein Hintergrundbild und ImageView2 ist ein kleineres Bild. Die Position von ImageView2 befindet sich irgendwo in der Mitte der Anwendung.Android: Kombiniere zwei Overlay-Bildansichten zu einem BMP mit korrekter Position

Ich möchte diese beiden ImageView in eine Bitmap kombinieren, so dass ImageView2 auf ImageView1 ist.

Der Kombinationsvorgang funktioniert gut, aber ImageView2 befindet sich immer in der oberen linken Ecke der BMP-Datei.

Unten ist mein Code, den ich die bmp zu generieren verwendet:

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(); 
    } 

Können Sie mir sagen, wie kann ich die Position der endgültigen Bitmap-Datei anpassen, so dass der ImageViews, wie es in der gleichen Position sein wird, Anzeige in der App?

Danke.

+0

@Kintaro können Sie mir in dieser Antwort helfen, wie Sie diese Aufgabe erreicht? – Erum

Antwort

3

erstellen Sie einfach eine FrameLayout und schließen Sie zwei ImageView s darin ein. es wird natürlich das erste Bild mit dem zweiten überlagern.

können Sie die Gravitation auf die Mitte anwenden oder die Bilder anderweitig ausrichten.

+0

Danke für die Antwort. Meine Frage ist, dass die letzte Bitmap (bmOverlay) beide imageViews enthält, aber die obere imageViews immer in der oberen linken Ecke der Bitmap ist. Meinst du, framelayout wird das für mich automatisch tun (wenn ich die Bitmap von framelayout erstelle)? –

+0

Wenn Sie zwei untergeordnete Elemente in das Rahmenlayout einfügen, werden sie einander genau überlagern, es sei denn, Sie fügen andere Layoutattribute hinzu, die dies nicht zulassen (z. B. den Container "match_parent" und unterschiedliche Gewichte für jedes untergeordnete Element). –

+0

Vielen Dank !!!! –