एंड्रॉइड में ग्रेडिएंट बैकग्राउंड कैसे बनाएं


229

मैं ग्रेडिएंट बैकग्राउंड बनाना चाहता हूं, जहां ग्रेडिएंट टॉप हाफ में है और बॉटम हाफ में सॉलिड कलर है, जैसे नीचे इस इमेज में है:

मैं centerColorनीचे और ऊपर को कवर करने के लिए फैलता नहीं है ।

बटन के लिए ढाल में, एक सफेद क्षैतिज रेखा शीर्ष और बोतलों की ओर नीले रंग से अधिक लुप्त होती है।

मैं पहली छवि की तरह पृष्ठभूमि कैसे बना सकता हूं? मैं छोटा कैसे बना सकता हूं जो centerColorफैल नहीं रहा है?

ऊपर के बैकग्राउंड बटन के XML में यह कोड है।

<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >
    <gradient 
        android:startColor="#6586F0"
        android:centerColor="#D6D6D6"
        android:endColor="#4B6CD6"
        android:angle="90"/>
    <corners 
        android:radius="0dp"/>


</shape>

1
धन्यवाद मैंने पहले ही हल कर दिया। लेकिन मुझे गर्व होगा अगर आप अधिक जवाब देंगे। stackoverflow.com/questions/6652547/…
kongkea

जवाबों:


59

आप एक फ़ाइल में ऊपर और नीचे 'बैंड' को मिलाने के लिए एक xml लेयर-लिस्ट का उपयोग करके इस 'अर्ध-ढाल' लुक को बना सकते हैं । प्रत्येक बैंड एक xml आकार है।

विस्तृत ट्यूटोरियल के लिए SO पर इस पिछले उत्तर को देखें: मल्टी-ग्रेडिएंट शेप


317

इसके साथ प्रयास करें:

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >

    <gradient
        android:angle="90"
        android:centerColor="#555994"
        android:endColor="#b5b6d2"
        android:startColor="#555994"
        android:type="linear" />

    <corners 
        android:radius="0dp"/>

</shape>

क्या होगा अगर मैं रैखिक लेआउट के लिए पृष्ठभूमि में एक ढाल डालना चाहता हूं ??
अंकित श्रीवास्तव

@Ankit यह लेआउट भरने का पैमाना होगा
Dawid Drozd

2
@Ankit: आप एक आकर्षक .xml फ़ाइल बनाते हैं, इस फ़ाइल में उपरोक्त कोड को कॉपी और पेस्ट करते हैं, fave fun। <RelativeLayout ... Android: पृष्ठभूमि = "@ drawable / your_xml_name" ...>
TomeeNS

इसके अलावा, यदि आप चाहते हैं कि ढाल पूरे स्क्रीन पर फीका हो जाए, तो केंद्र बैंड को 50% अस्पष्ट बना दें। इस मामले में "# ५०५५५ ९९ ४"
ज़ाचरी

@Pratik शर्मा मैं एक विशिष्ट हिस्से से इस क्रम को कैसे शुरू कर सकता हूं? मेरा मतलब है कि मैं बस थोड़ा सा दाईं ओर से रंग परिवर्तन शुरू करना चाहता हूं
उपयोगकर्ता

316

इस तरह के प्रश्न से दृश्य उदाहरण मदद करते हैं।

बॉयलरप्लेट

एक ढाल बनाने के लिए, आप एक xml फ़ाइल को रेस / ड्रॉबल में बनाते हैं। मैं my_gradient_drawable.xml को कॉल कर रहा हूं :

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <gradient
        android:type="linear"
        android:angle="0"
        android:startColor="#f6ee19"
        android:endColor="#115ede" />
</shape>

आप इसे कुछ दृश्य की पृष्ठभूमि पर सेट करते हैं। उदाहरण के लिए:

<View
    android:layout_width="200dp"
    android:layout_height="100dp"
    android:background="@drawable/my_gradient_drawable"/>

type = "रैखिक"

angleएक linearप्रकार के लिए सेट करें । यह 45 डिग्री से अधिक होना चाहिए।

<gradient
    android:type="linear"
    android:angle="0"
    android:startColor="#f6ee19"
    android:endColor="#115ede" />

यहां छवि विवरण दर्ज करें

type = "रेडियल"

gradientRadiusएक radialप्रकार के लिए सेट करें । उपयोग करने का %pअर्थ है कि यह माता-पिता के सबसे छोटे आयाम का एक प्रतिशत है।

<gradient
    android:type="radial"
    android:gradientRadius="10%p"
    android:startColor="#f6ee19"
    android:endColor="#115ede" />

यहां छवि विवरण दर्ज करें

type = "स्वीप '

मुझे नहीं पता कि कोई भी झाडू क्यों इस्तेमाल करेगा, लेकिन मैं इसे पूर्णता के लिए शामिल कर रहा हूं। मैं यह नहीं समझ पाया कि कोण को कैसे बदला जाए, इसलिए मैं केवल एक छवि सहित हूं।

<gradient
    android:type="sweep"
    android:startColor="#f6ee19"
    android:endColor="#115ede" />

यहां छवि विवरण दर्ज करें

केंद्र

आप स्वीप या रेडियल प्रकारों के केंद्र को भी बदल सकते हैं। मान चौड़ाई और ऊंचाई के अंश हैं। आप %pनोटेशन का उपयोग भी कर सकते हैं ।

android:centerX="0.2"
android:centerY="0.7"

यहां छवि विवरण दर्ज करें


49

निम्नलिखित लिंक आपको http://angrytools.com/gradient/ पर मदद कर सकता है । यह फोटोशॉप की तरह एंड्रॉइड में कस्टम ग्रेडिएंट बैकग्राउंड बनाएगा।


मुझे सीएसएस मैटिक यह एक और पसंद है, दूसरों के आने के लिए
krozaine

33

सबसे पहले आपको एक ढाल बनाने की जरूरत है। xml इस प्रकार है

<shape>
    <gradient android:angle="270" android:endColor="#181818" android:startColor="#616161" />

    <stroke android:width="1dp" android:color="#343434" />
</shape>

फिर आपको लेआउट की पृष्ठभूमि में ढाल के ऊपर उल्लेख करना होगा। इस प्रकार है

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@drawable/gradient"
    >   
</LinearLayout>

जिस पुस्तक में मैं पढ़ रहा हूँ, वह उन्हें ड्राबेल फ़ोल्डर में रखने की बात करती है। क्या मुझे प्रति फ़ोल्डर एक की आवश्यकता है?
जेगाल्डो

1
ड्रा करने योग्य फोल्डर बनाएं और उसमें gradient.xml फ़ाइल डालें, जिससे आप इसे एक्सेस कर सकें। इसके लिए कई फ़ोल्डर्स बनाने की आवश्यकता होगी।
हरीश

22

या आप PSD में जो कुछ भी सोच सकते हैं, उसका उपयोग कोड में कर सकते हैं:

    private void FillCustomGradient(View v) {
        final View view = v;
        Drawable[] layers = new Drawable[1];

        ShapeDrawable.ShaderFactory sf = new ShapeDrawable.ShaderFactory() {
            @Override
            public Shader resize(int width, int height) {
                LinearGradient lg = new LinearGradient(
                        0,
                        0,
                        0,
                        view.getHeight(),
                        new int[] {
                                 getResources().getColor(R.color.color1), // please input your color from resource for color-4
                                 getResources().getColor(R.color.color2),
                                 getResources().getColor(R.color.color3),
                                 getResources().getColor(R.color.color4)},
                        new float[] { 0, 0.49f, 0.50f, 1 },
                        Shader.TileMode.CLAMP);
                return lg;
            }
        };
        PaintDrawable p = new PaintDrawable();
        p.setShape(new RectShape());
        p.setShaderFactory(sf);
        p.setCornerRadii(new float[] { 5, 5, 5, 5, 0, 0, 0, 0 });
        layers[0] = (Drawable) p;

        LayerDrawable composite = new LayerDrawable(layers);
        view.setBackgroundDrawable(composite);
    }

और यह परत-सूचियों का उपयोग करते हुए तेज होना चाहिए
miroslavign

8
//Color.parseColor() method allow us to convert
// a hexadecimal color string to an integer value (int color)
int[] colors = {Color.parseColor("#008000"),Color.parseColor("#ADFF2F")};

//create a new gradient color
GradientDrawable gd = new GradientDrawable(
GradientDrawable.Orientation.TOP_BOTTOM, colors);

gd.setCornerRadius(0f);
//apply the button background to newly created drawable gradient
btn.setBackground(gd);

यहां से देखें https://android--code.blogspot.in/2015/01/android-button-gradient-color.html


3

इस कोड को ड्रा करने योग्य फ़ोल्डर में उपयोग करें।

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="#3f5063" />
    <corners
        android:bottomLeftRadius="30dp"
        android:bottomRightRadius="0dp"
        android:topLeftRadius="30dp"
        android:topRightRadius="0dp" />
    <padding
        android:bottom="2dp"
        android:left="2dp"
        android:right="2dp"
        android:top="2dp" />
    <gradient
        android:angle="45"
        android:centerColor="#015664"
        android:endColor="#636969"
        android:startColor="#2ea4e7" />
    <stroke
        android:width="1dp"
        android:color="#000000" />
</shape>

1

क्यों नहीं एक छवि या एक 9 पैच छवि बनाएँ और उसका उपयोग करें?

नीचे दिए गए लिंक पर यह करने के लिए एक अच्छा गाइड है:

http://android.amberfog.com/?p=247

यदि आप किसी आकृति का उपयोग करने पर ज़ोर देते हैं, तो नीचे दी गई साइट आज़माएँ (Android को नीचे बाईं ओर चुनें): http://angrytools.com/gradient/

मैंने इस लिंक पर आपके लिए एक समान ढाल (सटीक नहीं) बनाई है: http://angrytools.com/gradient/?0_6586f0,54_4B6CD6,2_D6D6D6&0_100,100_100&l_269

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.