मैं इसके समाधान के लिए भी खोज कर रहा था और अंत में, अपने स्वयं के समाधान के साथ आने में कामयाब रहा जो वास्तव में काफी सरल है।
मेरे मामले में, मेरे पास LinearLayout
था जिसमें View
तत्व शामिल थे, जिनमें से कुछ स्क्रीन पर नहीं थे, स्क्रीन स्क्रीन के अंत में लंबवत रूप से स्क्रीन पर नहीं थे। मैं View
को बिटमैप के रूप में सहेजने में सक्षम था (नीचे loadBitmapFromView()
देखें) लेकिन स्क्रीन के नीचे से विस्तारित होने पर परेशानी थी।
मेरा समाधान LinearLayout
ScrollView
समग्र का हिस्सा बनाना था।
उदा।
यह:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/my_linear_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<!-- Some Views added here at runtime -->
</LinearLayout>
बने:wrap_content
की
नोट उपयोग को सुनिश्चित करने scrollview अपनी सामग्री की ऊंचाई के पैमाने।
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/scroll"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
>
<LinearLayout
android:id="@+id/my_linear_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
>
<!-- Some Views added here at runtime -->
</LinearLayout>
</ScrollView>
यह सुनिश्चित करना है कि गुप्त आइटम मैन्युअल रूप से बाहर रखा जा सकता है जब मैं एक बिटमैप के रूप में View
बचाना चाहती थी लग रहा था। मैंने बिटमैप को सहेजने के लिए निम्न विधि का उपयोग किया। मैंने इसे बहुत पहले एसओ पर पाया लेकिन मुझे सही तरीके से संदर्भित करने के लिए प्रश्न नहीं मिल रहा है (जो भी आप हैं - धन्यवाद!)।
निम्न विधि के लिए, मैं ऊपर LinearLayout
(my_linear_layout
) के संदर्भ में पास करता हूं।
public static Bitmap loadBitmapFromView(View view) {
Bitmap bitmap = null;
// width measure spec
int widthSpec = View.MeasureSpec.makeMeasureSpec(
view.getMeasuredWidth(), View.MeasureSpec.AT_MOST);
// height measure spec
int heightSpec = View.MeasureSpec.makeMeasureSpec(
view.getMeasuredHeight(), View.MeasureSpec.AT_MOST);
// measure the view
view.measure(widthSpec, heightSpec);
// set the layout sizes
int left = view.getLeft();
int top = view.getTop();
int width = view.getMeasuredWidth();
int height = view.getMeasuredHeight();
int scrollX = view.getScrollX();
int scrollY = view.getScrollY();
view.layout(left, top, width + left, height + top);
// create the bitmap
bitmap = Bitmap.createBitmap(view.getWidth(), view.getHeight(),
Bitmap.Config.ARGB_8888);
// create a canvas used to get the view's image and draw it on the
// bitmap
Canvas c = new Canvas(bitmap);
// position the image inside the canvas
c.translate(-view.getScrollX(), -view.getScrollY());
// get the canvas
view.draw(c);
return bitmap;
}
आपकी तेज प्रतिक्रिया के लिए धन्यवाद निर्माता। View.getDrawable() विधि केवल दृश्यों द्वारा समर्थित है, उदाहरण के लिए ImageView की तरह एक अग्रभूमि चित्र "पकड़ें"। रिलेवेटलाइट्स, लीनियर लेआउट्स, टेक्स्ट व्यू इत्यादि जैसे अन्य सभी दृश्य इस विधि का समर्थन नहीं करते हैं। अधिकांश इंटरनेट फ़ोरम एक दृश्य से बिटमैप स्क्रीनशॉट (यानी पृष्ठभूमि प्लस फोरग्राउंड) बनाने के लिए विधि 1 या 2 (मेरी पोस्ट देखें) की अनुशंसा करते हैं। Oversized दृश्यों के लिए समस्या अभी भी अनसुलझा है। कोई अन्य विचार? –
ठीक है, मैंने पहले ही उल्लेख किया है कि view.getDrawable() पोस्ट में प्रत्येक दृश्य द्वारा समर्थित नहीं है। उन दो तरीकों से ऑफ-स्क्रीन पार्ट्स समेत पूर्ण छवि मिलती है, हो सकता है कि आप कैनवास और कस्टम व्यू का उपयोग करके उन दो अलग-अलग छवियों को एक दृश्य में डालने का प्रयास कर सकें (यदि भूमिगत एक पारदर्शी पृष्ठभूमि पीएनजी छवि है) और प्राप्त करें वहां से आकर्षित करने योग्य, हालांकि मैंने कभी कोशिश नहीं की, इसलिए यह नहीं बता सकता कि यह कैसे काम करेगा, लेकिन यदि आप इसका पालन कर सकते हैं तो आपको जो चाहिए वह प्राप्त हो सकता है। – noob
GetDrawingCache() विधि केवल ऑन-स्क्रीन छवि देने का इरादा है, इसलिए मुझे नहीं लगता कि यह आपके लिए काम करेगा। GetDrawingCache (सत्य) का उपयोग करना आपके लिए काम कर सकता है। एक और विचार स्क्रीन फिट करने के लिए लेआउटपैम का उपयोग करके दृश्य का आकार बदलना और फिर वहां से ड्राइंग कैश प्राप्त करना हो सकता है। – noob