Android'de degrade arka plan nasıl yapılır


229

Degradenin üst yarısında olduğu ve alt yarısında aşağıdaki renkte olduğu gibi düz bir renk olduğu gradyan arka planı oluşturmak istiyorum:

Yapamam çünkü centerColoryayılır alt ve üst örtmek için.

Düğmenin gradyanında, beyaz yatay bir çizgi mavinin üstüne ve bottona doğru kaybolur.

İlk görüntü gibi bir arka planı nasıl oluşturabilirim? centerColorYayılmayan nasıl küçük yapabilirim ?

Bu yukarıdaki arka plan düğmesinin XML kodudur.

<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
teşekkürler zaten çözdüm. ama daha fazla cevap verirsen gurur duyacağım. stackoverflow.com/questions/6652547/…
kongkea

Yanıtlar:



317

Şunu deneyin:

<?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>

Doğrusal düzen için arka planda bir degrade koymak istersem ne olur?
Ankit Srivastava

@Ankit Düzeni doldurmak için ölçeklendirilecek
Dawid Drozd

2
@Ankit: Çekilebilir bir .xml dosyası oluşturuyorsunuz, yukarıdaki kodu kopyalayıp bu dosyaya yapıştırıyorsunuz, eğlenceli. <RelativeLayout ... android: background = "@ drawable / your_xml_name" ...>
TomeeNS

Ayrıca, degradenin tüm ekran boyunca solmasını istiyorsanız, orta bandı% 50 opaklık haline getirin. Bu durumda "# 50555994"
Zachary

@Pratik Sharma Bu degradeyi belirli bir bölümden başlatmayı nasıl belirleyebilirim? yani ben sadece sağ taraftan biraz renk değişimini başlatmak istiyorum demek
Kullanıcı

317

Görsel örnekler bu tür sorulara yardımcı olur.

Basmakalıp

Degrade oluşturmak için res / drawable'da bir xml dosyası oluşturursunuz. Benimkini my_gradient_drawable.xml olarak adlandırıyorum :

<?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>

Bazı görünümlerin arka planına ayarlayın. Örneğin:

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

tip = "doğrusal"

angleBir lineartür için ayarlayın . 45 derecenin katı olmalıdır.

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

resim açıklamasını buraya girin

tip = "radyal"

gradientRadiusBir radialtür için ayarlayın . Bu %pdemektir ki bu, ebeveynin en küçük boyutunun yüzdesidir.

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

resim açıklamasını buraya girin

type = "süpürme"

Kimsenin neden bir süpürme kullanacağını bilmiyorum, ama tamlık için ekliyorum. Açıyı nasıl değiştireceğimi anlayamadım, bu yüzden sadece bir resim ekliyorum.

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

resim açıklamasını buraya girin

merkez

Süpürme veya radyal tiplerin merkezini de değiştirebilirsiniz. Değerler, genişlik ve yüksekliğin kesirleridir. %pGösterimi de kullanabilirsiniz .

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

resim açıklamasını buraya girin



33

İlk önce aşağıdaki gibi bir gradient.xml oluşturmanız gerekir

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

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

Ardından, düzenin arka planındaki yukarıdaki gradyandan bahsetmeniz gerekir.

<?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>

okuduğum kitapta onları drawables klasörüne koymaktan bahsediyor. Klasör başına bir taneye ihtiyacım var mı?
JGallardo

1
Çekilebilir klasör üzerinde oluşturun ve gradient.xml dosyasını oradan erişebileceğiniz bir yere koyun. Birden fazla klasör oluşturmanıza gerek yok.
Harish

22

Veya PSD'de ne düşünürseniz düşünün kodda kullanabilirsiniz:

    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);
    }

ve katman listelerini kullanmaktan daha hızlı olmalı
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);

Buradan https://android--code.blogspot.in/2015/01/android-button-gradient-color.html adresine bakın.


3

Bu kodu çekilebilir klasörde kullanın.

<?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>

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.