web-dev-qa-db-ja.com

Android LinearLayoutグラデーションの背景

LinearLayoutにグラデーションの背景を適用できません。

これは私が読んだものからは比較的単純なはずですが、うまくいかないようです。参考のために私は2.1-update1で開発しています。

header_bg.xml:

<?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:startColor="#FFFF0000"
        Android:endColor="#FF00FF00"
        Android:type="linear"/>
</shape>

main_header.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="fill_parent"
    Android:layout_height="50dip"
    Android:orientation="horizontal"
    Android:background="@drawable/header_bg">
</LinearLayout>

@ drawable/header_bgを色に変更したら - 例えば#FF0000それは完全にうまくいきます。ここで明らかな何かが足りないのですか。

223
Genesis

わかりました私はセレクタを使用してこれを解決することができました。以下のコードを参照してください。

main_header.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="fill_parent"
    Android:layout_height="50dip"
    Android:orientation="horizontal"
    Android:background="@drawable/main_header_selector">
</LinearLayout>

main_header_selector.xml:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item>
    <shape>
        <gradient
            Android:angle="90"
            Android:startColor="#FFFF0000"
            Android:endColor="#FF00FF00"
            Android:type="linear" />
    </shape>
</item>
</selector>

うまくいけば、これは同じ問題を抱えている誰かに役立ちます。

377
Genesis

3色目(中央)にすることも可能です。そしていろいろな形。

たとえば、drawable/gradient.xmlにあります。

<shape
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:shape="rectangle">
    <gradient
        Android:startColor="#000000"
        Android:centerColor="#5b5b5b"
        Android:endColor="#000000"
        Android:angle="0" />
</shape>

これはあなたに黒 - 灰色 - 黒(左から右へ)を与えます、これは私のお気に入りの暗い背景のatmです。

レイアウトxmlの背景としてgradient.xmlを追加することを忘れないでください。

Android:background="@drawable/gradient"

次のように回転させることも可能です。

角度= "0"

あなたに垂直線を与えます

そしてと

角度= "90"

あなたに水平線を与える

可能な角度は以下のとおりです。

0、90、180、270。

また、形状の種類がいくつかあります。

Android:shape = "レクタングル"

丸みを帯びた形状:

アンドロイド:shape = "oval"

そしておそらくもう少し。

応援よろしくお願いします。

59
Sindri Þór

XMLドロアブルファイルの場合:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <item>
        <shape>
            <gradient Android:angle="90"
                Android:endColor="#9b0493"
                Android:startColor="#38068f"
                Android:type="linear" />
        </shape>
    </item>
</selector>

あなたのレイアウトファイルで:Android:background = "@ drawable/gradient_background"

  <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        Android:background="@drawable/gradient_background"
        Android:orientation="vertical"
        Android:padding="20dp">
        .....

</LinearLayout>

enter image description here

28

Androidを削除してみてください。gradientRadius = "90"。これは私のために働くものです:

<shape 
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:shape="rectangle"
>
    <gradient
        Android:startColor="@color/purple"
        Android:endColor="@color/pink"
        Android:angle="270" />
</shape>
18

私の問題は、新しく作成されたXMLファイルのファイル名に.xml拡張子が追加されなかったことです。 .xml拡張子を追加すると私の問題は解決しました。

6
kwahn

これが誰にも役立つかどうかはわかりませんが、私の問題は、ImageViewの "src"プロパティにグラデーションを設定しようとしていたことです。

<ImageView 
    Android:id="@+id/imgToast"
    Android:layout_width="wrap_content"
    Android:layout_height="60dp"
    Android:src="@drawable/toast_bg"
    Android:adjustViewBounds="true"
    Android:scaleType="fitXY"/>

それがうまくいかなかった理由は100%確かではありませんが、今私はそれを変更し、ImageViewの親の "background"プロパティにdrawableを入れています。

<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="match_parent"
    Android:id="@+id/custom_toast_layout_id"
    Android:layout_height="match_parent"
    Android:background="@drawable/toast_bg">
1
instanceof

グラデーションカラーのアルファチャンネルを確認します。私にとって、コードをテストしていたときに、アルファチャンネルの色が正しく設定されていなかったため、うまくいきませんでした。アルファチャンネルを設定したら、すべてうまくいきました。

0
Ray Hunter

それにはカスタムビューを使用できます。このソリューションにより、プロジェクト内のすべての色のグラデーション形状が完成しました。

class GradientView(context: Context, attrs: AttributeSet) : View(context, attrs) {

    // Properties
    private val Paint: Paint = Paint()
    private val rect = Rect()

    //region Attributes
    var start: Int = Color.WHITE
    var end: Int = Color.WHITE
    //endregion

    override fun onSizeChanged(w: Int, h: Int, oldw: Int, oldh: Int) {
        super.onSizeChanged(w, h, oldw, oldh)
        // Update Size
        val usableWidth = width - (paddingLeft + paddingRight)
        val usableHeight = height - (paddingTop + paddingBottom)
        rect.right = usableWidth
        rect.bottom = usableHeight
        // Update Color
        Paint.shader = LinearGradient(0f, 0f, width.toFloat(), 0f,
                start, end, Shader.TileMode.CLAMP)
        // ReDraw
        invalidate()
    }

    override fun onDraw(canvas: Canvas) {
        super.onDraw(canvas)
        canvas.drawRect(rect, Paint)
    }

}

また、このカスタムビューでオープンソースプロジェクトGradientViewを作成します。

https://github.com/lopspower/GradientView

implementation 'com.mikhaellopez:gradientview:1.1.0'
0
lopez.mikhael