281

下の画像のように、グラデーションが上半分にあり、下半分が単色であるグラデーションの背景を作成したいと思います。

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

9 に答える 9

483

視覚的な例は、この種の質問に役立ちます。

ボイラープレート

グラデーションを作成するには、res/drawableに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 = "linear"

angleタイプのを設定しlinearます。45度の倍数である必要があります。

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

ここに画像の説明を入力してください

type = "radial"

gradientRadiusタイプのを設定しradialます。使用%pとは、親の最小寸法のパーセンテージであることを意味します。

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

ここに画像の説明を入力してください

type = "sweep"

なぜ誰かがスイープを使用するのかわかりませんが、完全を期すためにスイープを含めています。角度を変える方法がわからなかったので、1枚の画像しか含めていません。

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

ここに画像の説明を入力してください

中心

スイープまたはラジアルタイプの中心を変更することもできます。値は、幅と高さの端数です。%p表記も使用できます。

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

ここに画像の説明を入力してください

于 2017-07-17T01:02:16.163 に答える
331

これで試してください:

<?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>
于 2012-12-18T10:14:34.050 に答える
65

xml Layer-Listを使用して、上部と下部の「バンド」を1つのファイルに結合することにより、この「半グラデーション」の外観を作成できます。各バンドはxml形状です。

詳細なチュートリアルについては、SOに関するこの以前の回答を参照してください:マルチグラデーション形状

于 2012-12-18T10:11:20.883 に答える
53

次のリンクは、 http: //angrytools.com/gradient/に役立つ場合があります。これにより、フォトショップのように、Androidでカスタムグラデーションの背景が作成されます。

于 2014-01-22T11:30:21.060 に答える
40

まず、次のようにgradient.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>
于 2012-12-18T10:10:47.107 に答える
25

または、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);
    }
于 2012-12-20T09:06:08.940 に答える
14
//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

于 2017-05-27T18:54:37.850 に答える
8

ドローアブルフォルダでこのコードを使用します。

<?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>
于 2018-09-04T11:50:54.217 に答える
1

イメージや9パッチイメージを作成して使ってみませんか?

以下のリンクには、その方法に関する優れたガイドがあります。

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

Shapeの使用を強く主張する場合は、以下のサイトを試してください(左下のAndroidを選択してください): http: //angrytools.com/gradient/

このリンクにあるものと同様のグラデーション(正確ではありません)を作成しました: http: //angrytools.com/gradient/?0_6586f0,54_4B6CD6,2_D6D6D6&0_100,100_100&l_269

于 2012-12-18T09:44:41.547 に答える