2015-04-22 12 views
9

जैसे कोई GPU ओवरड्रा के साथ पृष्ठभूमि बनाएं, मुझे GPU ओवरड्रा समस्या का सामना करना पड़ता है। Romain Guy's अनुच्छेद के अनुसार, यहां बुनियादी रंग हैं:एंड्रॉइड: ऐप प्रदर्शन को बेहतर बनाने के लिए व्हाट्सएप


  • कोई रंग का मतलब है कोई ओवरड्रॉ। पिक्सेल केवल एक बार चित्रित किया गया था। इस उदाहरण में, आप देख सकते हैं कि पृष्ठभूमि बरकरार है।

  • ब्लू 1x का ओवरड्रा इंगित करता है। पिक्सेल दो बार चित्रित किया गया था। बड़े नीले क्षेत्र स्वीकार्य हैं (यदि पूरी खिड़की नीली है, तो आप एक परत से छुटकारा पा सकते हैं।)

  • ग्रीन 2x की ओवरड्रा इंगित करता है। पिक्सेल को तीन बार चित्रित किया गया था। मध्यम आकार के हरी क्षेत्र स्वीकार्य हैं लेकिन आपको उन्हें अनुकूलित करने का प्रयास करना चाहिए।
  • हल्का लाल 3x का ओवरड्रा इंगित करता है। पिक्सेल चार बार चित्रित किया गया था। छोटे हल्के लाल क्षेत्र स्वीकार्य हैं।
  • डार्क रेड 4x या उससे अधिक की ओवरड्रा इंगित करता है। पिक्सेल को 5 गुना या उससे अधिक चित्रित किया गया था। ये गलत है। it.`

कि टेस्ट को ठीक है, मैं के रूप में

एक्सएमएल कोड

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context=".MainActivity" 

    android:layout_margin="50dp" 
    android:background="#fff"> 

    <TextView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:text="@string/hello_world"/> 

</RelativeLayout> 

इस प्रकार एक्सएमएल के साथ एक सरल परियोजना बना सकते हैं और परिणाम प्राप्त:
n00b Me

फिर मैंने व्हाट्सएप ओवरड्रा की कोशिश की डब्ल्यू। मेरे आश्चर्य करने के लिए:
Awesome Whatsapp

तो कैसे Whatsapp कोई ओवरड्रॉ (कोई नीले रंग) साथ पृष्ठभूमि वॉलपेपर आ रहा है, लेकिन मेरी सरल एक्सएमएल में, यहां तक ​​कि रंग एक ओवरड्रॉ देता है??

पुनश्च: मैं जानबूझकर जोड़ लिया है पृष्ठभूमि रंग दिखाने के लिए कि रंग जोड़ने देता है अधिक निकालना लेकिन वॉलपेपर जोड़ने

उत्तर

24

प्रत्येक गतिविधि में एक डिफ़ॉल्ट पृष्ठभूमि होती है जो थीम के android:windowBackground विशेषता से आ रही है।

व्हाट्सएप पृष्ठभूमि छवि का उपयोग कर रहा है जिसे पूरे स्क्रीन को भरने के लिए दोनों दिशाओं में दोहराया जा सकता है। इस तरह उन्हें विभिन्न स्क्रीन आकारों के लिए अलग-अलग छवियों के साथ परेशानी करने की आवश्यकता नहीं है - यह सुपर उत्तरदायी है!

तो मान लीजिए कि आप (जैसे drawable-nodpi/background_tile.png) इस तरह के एक टाइलों छवि है जाने

बस एक नया एक्सएमएल Drawable बनाने (जैसे drawable/background.xml) जो इस प्रकार है:

<?xml version="1.0" encoding="utf-8"?> 
<bitmap xmlns:android="http://schemas.android.com/apk/res/android" 
    android:src="@drawable/background_tile" 
    android:tileMode="repeat" /> 

<style name="AppTheme" parent="Theme.AppCompat.Light"> 
    <item name="android:windowBackground">@drawable/background</item> 
</style> 

तुम भीसाथ रनटाइम पर एक गतिविधि की पृष्ठभूमि Drawable सेट कर सकते हैं:

अब बस अपने गतिविधि की थीम के लिए एक पृष्ठभूमि के रूप में इस Drawable सेटgetWindow().setBackgroundDrawable या getWindow().setBackgroundDrawableResource

आप पृष्ठभूमि Drawable null, उदाहरण के लिए सेट कर सकते हैं कि पूरी गतिविधि एक MapView या कुछ इसी तरह चलता।

यह भी ध्यान दें कि Zygote ऐप स्टार्टअप चरण के दौरान थीम की पृष्ठभूमि का उपयोग करेगा यदि गतिविधि आपकी मुख्य लॉन्चर गतिविधि है।

1

नहीं है मुझे लगता है कि एक अधिक निकालना आपके पास अपने RelativeLayout की पृष्ठभूमि है। आप उस android:background="#fff" को हटा सकते हैं, पृष्ठभूमि को ऐप थीम के आधार पर एक बार खींचा जाएगा।

+0

मैंने जानबूझकर पृष्ठभूमि रंग जोड़ा है यह दिखाने के लिए कि रंग जोड़ना ओवरड्रा देता है लेकिन वॉलपेपर जोड़ना – Aexyn

+0

नहीं है, यह सिर्फ एक जंगली अनुमान है कि मैं गतिविधि की पृष्ठभूमि को थीम में पारदर्शी बना सकता हूं, हम एक ओवरड्रा को कम कर सकते हैं। –

2

Bill Gates के संकेत को लागू करते हुए, यह शैलियों.एक्सएमएल में सेटिंग पृष्ठभूमि को वास्तव में एक ओवरड्रा बचाता है।इस कोड की बचत होती है एक ओवरड्रॉ

<resources> 

    <!-- Base application theme. --> 
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> 
     <!-- Customize your theme here. --> 
     <item name="android:windowBackground">@color/highlighted_text_material_dark</item> 
    </style> 

</resources> 

अब पृष्ठभूमि जोड़ना किसी भी ओवरड्रॉ नहीं ले करता है तो Relative Layout फिर भी एक ओवरड्रॉ

BackGround with no OverDraw

अद्यतन ऊपर विधि काम करता है, और अच्छा है अगर आप अपने सभी ऐप के लिए समान रंग पृष्ठभूमि चाहते हैं। लेकिन मामले में आप अलग अलग रंग और अभी भी ओवरड्रॉ बचाने करना चाहते हैं, साथ

One Step Further
बूम रेखा से ऊपर की जगह चाहते हैं .. आप जाना .. अच्छे हैं

टिप: यदि आपका ऐप है पृष्ठभूमि के रूप में काला रंग .. इसके लिए एक और ओवरड्रा बचाएं;)

+2

यदि लेआउट के मूल दृश्य में ठोस पृष्ठभूमि नहीं है, तो मैं विंडो बैकग्राउंड को @null पर सेट करने की अनुशंसा नहीं करता क्योंकि यह गतिविधि की पृष्ठभूमि को काले रंग में सेट नहीं करता है। इसके बजाए, यह तब "कुछ भी नहीं" होगा, जिससे आप बहुत ही अजीब कलाकृतियों का कारण बन सकते हैं जैसे ही आप एनिमेट करते हैं या दृश्यों के चारों ओर घूमते हैं। – astuetz

+0

"इसके बजाए, इसे प्राप्त करें रंग/छवि पर सेट करें या GetWindow() पर कॉल करके क्रिएट() से छुटकारा पाएं। रूटबैकग्राउंड ड्रायबल (शून्य)", रूट गतिविधि के लिए विषय में नहीं – superuser

+0

उत्कृष्ट समाधान @Aexyn बहुत धन्यवाद। .. – Kushal

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

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