2012-12-24 9 views
13

मैं क्या पढ़ा है के अनुसार, यदि आप एक gradientDrawable का उपयोग करें और यह तीन रंगों के लिए सेट कर सकते हैं, उदाहरण के लिए:तीन से अधिक रंग के साथ एक gradientDrawable का उपयोग करते हुए सेट

<gradient startColor="#00FF00" centerColor="#FFFF00" endColor="#FFFFFF"/> 

लेकिन क्या होगा अगर मैं और अधिक से अधिक चाहते हैं तीन रंग, और न केवल वह, मैं प्रत्येक सेट (वजन/प्रतिशत में) कहां सेट करने में सक्षम होना चाहता हूं?

यह संभव एपीआई का उपयोग कर या मैं अपने खुद के अनुकूलित drawable करना चाहिए है? अगर मुझे अपनी खुद की अनुकूलित ड्रायबल बनाने की ज़रूरत है, तो मुझे इसे कैसे करना चाहिए?

+0

मुझे लगता है कि आप इस सवाल का जवाब [यहां] (http पा सकते हैं: //stackoverflow.com/questions/4381033/multi-gradient-shapes)। – Androidz

उत्तर

15

अपने OnCreate() विधि में इस कोड डाल:

ShapeDrawable.ShaderFactory shaderFactory = new ShapeDrawable.ShaderFactory() { 
    @Override 
    public Shader resize(int width, int height) { 
     LinearGradient linearGradient = new LinearGradient(0, 0, width, height, 
      new int[] { 
       0xFF1e5799, 
       0xFF207cca, 
       0xFF2989d8, 
       0xFF207cca }, //substitute the correct colors for these 
      new float[] { 
       0, 0.40f, 0.60f, 1 }, 
      Shader.TileMode.REPEAT); 
     return linearGradient; 
    } 
}; 
PaintDrawable paint = new PaintDrawable(); 
paint.setShape(new RectShape()); 
paint.setShaderFactory(shaderFactory); 

और एक पृष्ठभूमि के रूप में इस drawable का उपयोग करें।

आप परतों बनाने के द्वारा भी एक्सएमएल में तीन से अधिक रंग जोड़ सकते हैं। लेकिन एक्सएमएल में यह काफी जटिल है।

+0

यह बहुत अच्छा लग रहा है, लेकिन मैं इसका उपयोग कैसे करूं? भी, क्या इसे एक अनुकूलित ड्रायबल के रूप में रखना संभव है? –

+0

जैसा आप ActionBar पृष्ठभूमि सेट करने के लिए करता है, तो:। getActionBar() setDisplayOptions (ActionBar.DISPLAY_SHOW_CUSTOM); getActionBar()। SetBackgroundDrawable (पेंट); या आप कोई बटन है: // एक बटन बटन बटन के रूप में पहचान के साथ उर xml फ़ाइल में एक बटन को परिभाषित = (बटन) findViewById (R.id.button); बटन.सेटबैकग्राउंड ड्रायबल ((ड्रायरेबल) पेंट); – Bhaskar

+0

यह बहुत अच्छा लगता है। इसलिए यदि मैं एक अनुकूलित ड्रायबल करना चाहता हूं, तो मुझे केवल पेंट ड्राउबल का विस्तार करना है और फिर आपके द्वारा सेट किया गया कोड डालना है, केवल इसे स्वयं सेट करने के लिए? –

1

मुझे लगता है कि नीचे संभव समाधान हैं।

  • आप ग्रेडियेंट के साथ कई आकार बना सकते हैं और एक बड़ा आकार बना सकते हैं।
  • आप GradientDrawable Class को विस्तारित करके अपना खुद का ग्रेडियंट ड्रायबल बना सकते हैं नीचे दिए गए दस्तावेज़ का संदर्भ लें।

  • Gradient Drawable Documentation

+0

क्या आप कृपया दूसरा नमूना करने का नमूना दिखा सकते हैं? –

2

यह एक xml फ़ाइल में ऐसा करना संभव नहीं है, लेकिन आप GradientDrawable वर्ग के साथ yout जावा कोड में +3 रंग ढाल लागू कर सकते हैं:

GradientDrawable gradientDrawable = new GradientDrawable(
       Orientation.TOP_BOTTOM, 
       new int[]{ContextCompat.getColor(this, R.color.color1), 
         ContextCompat.getColor(this, R.color.color2), 
         ContextCompat.getColor(this, R.color.color3), 
         ContextCompat.getColor(this, R.color.color4)}); 

     findViewById(R.id.background).setBackground(gradientDrawable); 
+0

यह भी एक अच्छा समाधान है, और छोटा है। –

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