2012-09-26 8 views
5

मेरे पास दो छवि दृश्य हैं। ImageView1 एक पृष्ठभूमि छवि है और ImageView2 एक छोटी छवि है। ImageView2 की स्थिति कहीं भी एप्लिकेशन के बीच में है।एंड्रॉइड: सही स्थिति के साथ दो ओवरले छविदृश्यों को एक बीएमपी में मिलाएं

मैं उन दो छवि दृश्य को बिटमैप में जोड़ना चाहता हूं ताकि ImageView2 ImageView1 के शीर्ष पर हो।

गठबंधन प्रक्रिया ठीक काम करती है लेकिन ImageView2 हमेशा बीएमपी फ़ाइल के ऊपरी बाएं कोने पर होती है।

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 यह रूप में एक ही स्थिति में होगा:

नीचे मेरी कोड है कि मैं bmp उत्पन्न करने के लिए प्रयोग किया जाता है ऐप पर प्रदर्शित करें?

धन्यवाद।

+0

@ किंटारो क्या आप इस जवाब में मेरी सहायता कर सकते हैं कि आपने यह कार्य कैसे प्राप्त किया? – Erum

उत्तर

3

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

आप केंद्रों के लिए गुरुत्वाकर्षण लागू कर सकते हैं या अन्यथा छवियों को संरेखित कर सकते हैं।

+0

उत्तर के लिए धन्यवाद। मेरा सवाल यह है कि अंतिम बिटमैप (बीएमओवरले) में छवि दृश्य दोनों शामिल हैं लेकिन शीर्ष छवि दृश्य हमेशा बिटमैप के शीर्ष बाएं कोने पर होते हैं। क्या आपका मतलब है कि framelayout स्वचालित रूप से मेरे लिए ऐसा करेगा (जब मैं framelayout से बिटमैप बनाते हैं)? –

+0

यदि आप फ्रेम लेआउट में दो बच्चों को डालते हैं, तो वे एक दूसरे को बिल्कुल ओवरले करेंगे, जब तक कि आप अन्य लेआउट विशेषताओं को न जोड़ें जो ऐसा नहीं करते हैं (जैसे कंटेनर match_parent बनाने और प्रत्येक बच्चे पर विभिन्न गुरुत्वाकर्षण सेट करना)। –

+0

बहुत बहुत धन्यवाद !!!! –

संबंधित मुद्दे