2013-03-03 6 views
9

मैं एक ऐप तैयार कर रहा हूं जिसके लिए कैनवास पर बहुत सारी ड्राइंग की आवश्यकता है। मैंने देखा है कि ऐप उच्च रिज़ॉल्यूशन वाले डिवाइसों में थोड़ा सा है (उदाहरण के लिए नेक्सस 7)। मैंने देखा कि डेवलपर विकल्प में एक फोर्स जीपीयू विकल्प है। जब फोर्स जीपीयू सक्षम है, तो मेरा ऐप बिल्कुल चिकनी चलता है।एंड्रॉइड फोर्स जीपीयू रेंडरिंग कैसे सक्षम और अक्षम करें?

मैंने पढ़ा है कि इस फोर्स जीपीयू विकल्प को हार्डवेयर त्वरण कहा जाता है और यह केवल एंड्रॉइड 3.0 और उसके बाद के संस्करण के लिए उपलब्ध है।

मेरा ऐप एंड्रॉइड 2.3 और उसके बाद वाले वर्शन को लक्षित कर रहा है।

क्या किसी भी एंड्रॉइड 3.0 या उपरोक्त डिवाइस पर प्रोग्रामिक रूप से हार्डवेयर त्वरित (या जीपीयू - जिसे भी जादू कहा जाता है) सक्षम करना संभव है?

कुछ की तरह:

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB){ 

    Turn On Hardware Accelerate HERE but How can i do this? 
    any code snippet would be welcome/helpful/thanks 

} 
+0

भ्रम के लिए खेद है, मैं एंड्रॉइड 2.3 एपीआई 10 पर अपना ऐप बना रहा हूं, इसलिए यह नहीं है वास्तव में या getWindow()। setFlags ( WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED, WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED); – xiaowoo

+0

क्या आपने अपने ऑनक्रेट पर दमन जोड़ा था? – wtsang02

+0

कृपया अपना निर्माण लक्ष्य API स्तर 11 या उच्चतम पर सेट करें, फिर 'android: hardwareAccelerated =" true "का उपयोग करें। – CommonsWare

उत्तर

6

मैं आप मान पहले से ही एंड्रॉयड जोड़ दिया है: अपने मालसूची फ़ाइल को hardwareAccelerated?

<application android:hardwareAccelerated="true" ...> 

यही कारण है कि the guide on hardware acceleration प्रति अपने आवेदन के भीतर हार्डवेयर त्वरण सक्षम बनाता है और वास्तव में क्या GPU के लिए मजबूर कर एक प्रणाली के स्तर पर करता क्या करना चाहिए है।

+0

मेरा ऐप एंड्रॉइड 2 का उपयोग करता है।3 एपीआई 10, इसमें एंड्रॉइड नहीं है: हार्डवेयर एक्सेलेरेटेड, इसलिए इसकी विशेषता है "विशेषता के लिए कोई संसाधन पहचानकर्ता नहीं मिला 'हार्डवेयर' पैकेज 'एंड्रॉइड' – xiaowoo

+1

में आप अलग-अलग एपीआई स्तर बना सकते हैं और लक्षित कर सकते हैं। एपीआई 11+ के खिलाफ बनाएं और अपना न्यूनतम एसडीके 10 पर रखें। – ianhanniballake

+0

इयानहैनिबेलकेक, आप कह रहे हैं कि मैं नवीनतम एपीआई (11) का उपयोग करके अपना ऐप बना सकता हूं और इसे अभी भी कम एपीआई उपकरणों में चलाने योग्य बना सकता हूं? क्या इसका मतलब है कि मुझे अपने एंड्रॉइड प्रोजेक्ट लक्ष्य को नवीनतम एपीआई में अपग्रेड करना होगा? – xiaowoo

3

सेट minSdkVersion 10 और targetSdkVersion अधिकतम

करने की तरह नीचे

<uses-sdk 
     android:minSdkVersion="10" 
     android:targetSdkVersion="17" /> 

तो

<application android:hardwareAccelerated="true" ...> 

अब

और विशेषताओं

0 के लिए काम करेंगे

या

if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.HONEYCOMB){ 
    view.setLayerType(View.LAYER_TYPE_SOFTWARE, null); 
} 
0

आप प्रतिबिंब के माध्यम से विधि का उपयोग कर सकते आप निम्नतर API स्तर का उपयोग कर अपने आवेदन का निर्माण करना चाहते हैं:

try { 
     Method setLayerType = view.getClass().getMethod(
       "setLayerType", new Class[] { int.class, Paint.class }); 
     if (setLayerType != null) 
      setLayerType.invoke(view, new Object[] { LAYER_TYPE_X, null }); 
    } catch (NoSuchMethodException e) { 
    } catch (IllegalArgumentException e) { 
    } catch (IllegalAccessException e) { 
    } catch (InvocationTargetException e) { 
    } 

कहाँ LAYER_TYPE_X वांछित परत प्रकार की लगातार पूर्णांक मान है:

LAYER_TYPE_NONE = 0 
LAYER_TYPE_SOFTWARE = 1 
LAYER_TYPE_HARDWARE = 2 
संबंधित मुद्दे