Cara membuat latar belakang gradien di android

229

Saya ingin membuat latar belakang gradien di mana gradien berada di bagian atas dan ada warna solid di bagian bawah, seperti pada gambar di bawah ini:

Saya tidak bisa karena centerColormenyebar untuk menutupi bagian bawah dan atas.

Pada gradien untuk tombol, garis horizontal putih memudar dari biru ke arah atas dan botton.

Bagaimana saya bisa membuat latar belakang seperti gambar pertama? Bagaimana saya bisa membuat kecil centerColoryang tidak menyebar?

Ini adalah kode dalam XML tombol latar belakang di atas.

<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>
kongkea
sumber
1
terima kasih sudah menyelesaikannya. tapi saya akan bangga jika Anda menjawab lebih banyak. stackoverflow.com/questions/6652547/...
kongkea
coba ini webgradients.com
Ivan Aracki

Jawaban:

59

Anda dapat membuat tampilan 'setengah-gradien' ini dengan menggunakan xml Layer-List untuk menggabungkan 'band' atas dan bawah menjadi satu file. Setiap band adalah bentuk xml.

Lihat jawaban sebelumnya pada SO untuk tutorial terperinci: Bentuk multi-gradien .

Gunnar Karlsson
sumber
317

Coba dengan ini:

<?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>
Pratik Sharma
sumber
Bagaimana jika saya ingin meletakkan gradien di latar belakang untuk tata letak linier ??
Ankit Srivastava
@Ankit Akan mengatur skala untuk mengisi tata letak
Dawid Drozd
2
@Ankit: Anda membuat file .xml yang dapat digambar, salin & tempel kode di atas ke dalam file ini, fave fun. <RelativeLayout ... android: background = "@ drawable / your_xml_name" ...>
TomeeNS
Juga, jika Anda ingin gradien memudar di seluruh layar, buat pita tengah 50% opacity. Dalam hal ini "# 50555994"
Zachary
@Pratik Sharma Bagaimana saya bisa menentukan untuk memulai gradien ini dari bagian tertentu? maksud saya, saya hanya ingin memulai perubahan warna dari sisi kanan sedikit
Pengguna
317

Contoh visual membantu dengan pertanyaan semacam ini.

Pelat boiler

Untuk membuat gradien, Anda membuat file xml di res / drawable. Saya menyebut nama saya 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>

Anda mengaturnya ke latar belakang beberapa tampilan. Sebagai contoh:

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

type = "linear"

Setel angleuntuk lineartipe. Itu harus kelipatan 45 derajat.

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

masukkan deskripsi gambar di sini

type = "radial"

Setel gradientRadiusuntuk radialtipe. Menggunakan %pberarti persentase dari dimensi terkecil dari induk.

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

masukkan deskripsi gambar di sini

type = "sweep"

Saya tidak tahu mengapa ada orang yang menggunakan sapuan, tetapi saya memasukkannya untuk kelengkapan. Saya tidak tahu cara mengubah sudut, jadi saya hanya menyertakan satu gambar.

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

masukkan deskripsi gambar di sini

pusat

Anda juga dapat mengubah bagian tengah dari tipe sapuan atau radial. Nilai adalah pecahan dari lebar dan tinggi. Anda juga dapat menggunakan %pnotasi.

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

masukkan deskripsi gambar di sini

Suragch
sumber
49

Tautan berikut dapat membantu Anda http://angrytools.com/gradient/ . Ini akan membuat latar belakang gradien khusus di android seperti di photoshop.

Hits
sumber
Saya suka CSS Matic yang satu ini lagi, untuk orang lain yang akan datang
krozaine
33

Pertama, Anda perlu membuat gradient.xml sebagai berikut

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

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

Maka Anda perlu menyebutkan gradien di atas di latar belakang tata letak. Sebagai berikut

<?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>
Harish
sumber
dalam buku yang saya baca itu berbicara tentang menempatkan mereka ke dalam folder drawables. Apakah saya memerlukan satu per folder?
JGallardo
1
Buat di drawable folder dan masukkan file gradient.xml dari sana Anda dapat mengaksesnya. Tidak perlu membuat banyak folder.
Harish
22

Atau Anda dapat menggunakan kode apa pun yang Anda pikirkan dalam 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
sumber
dan itu harus lebih cepat daripada menggunakan daftar lapisan
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);

Rujuk dari sini https://android--code.blogspot.in/2015/01/android-button-gradient-color.html

Upendranath Reddy
sumber
3

Gunakan kode ini di folder yang dapat digambar.

<?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>
Muthu Krishnan
sumber