CardView:如何在保持半径的同时添加渐变背景

时间:2019-04-16 18:21:14

标签: android xml android-cardview

我想用CardView重新创建下面的图像。为此,我创建了一个渐变文件(btn_gradient.xml),然后继续创建CardView。

enter image description here

CardView实现:

<android.support.v7.widget.CardView
        android:layout_width="match_parent"
        android:layout_height="44dp"
        android:layout_margin="25dp"
        app:cardElevation="0dp"
        app:cardCornerRadius="4dp"
        app:cardPreventCornerOverlap="false">

        <TextView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:gravity="center"
            android:background="@drawable/btn_gradient"
            android:text="Create Account"
            android:textColor="#000000"
            android:textStyle="bold"
            android:textAllCaps="false"/>


    </android.support.v7.widget.CardView>

除了半径消失以外,一切都可以正常工作,而这不是我想要的。有没有一种方法可以直接在CardView上设置渐变? cardBackgroundColor属性仅接受颜色,不接受可绘制对象。

任何帮助将不胜感激。



附录:
根据要求,这是我的btn_gradient.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="#ffc200"
    android:endColor="#fca10b" />
</shape>

5 个答案:

答案 0 :(得分:1)

如果我要问的话,您是否有机会在棒棒糖预售 Android设备上进行测试/运行?您的代码似乎可以按需工作(弯曲的角以渐变显示),例外在Android 4上。

要在棒棒糖之前的设备上获得理想的效果,可以将<corners android:radius="4dp" />添加到@drawable/btn_gradient文件中((您必须设置转角半径以匹配CardViewcardCornerRadius

答案 1 :(得分:0)

移动此行

android:background="@drawable/btn_gradient"

CardView对象

更新

我的坏事:

在内部放置一个用于包装。内容的布局。

在这种情况下,我会选择这样的<FrameLayout>

<androidx.cardview.widget.CardView
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <FrameLyout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="@drawable/btn_gradient">

答案 2 :(得分:0)

请勿在XML文件中使用android:background属性。 改用app:cardBackground。

要对其进行总结,请首先在drawable中创建一个渐变背景XML文件。 然后将其分配给app:cardBackgroundColor,如下所示:

app:cardBackgroundColor="@drawable/gradient_background"

如果您不知道如何创建gradient_background.xml,请在drawables目录上单击书写,创建新的xml文件,然后将下面的代码粘贴。

<?xml version="1.0" encoding="utf-8"?>
<shape android:shape="rectangle"  
xmlns:android="http://schemas.android.com/apk/res/android">
<gradient android:startColor="@color/secondaryColor"
    android:endColor="@color/primaryColor"
    android:angle="90"/>
</shape>

答案 3 :(得分:0)

  <androidx.cardview.widget.CardView
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_margin="@dimen/_10sdp"
                    app:cardCornerRadius="@dimen/_10sdp"
                    app:cardElevation="@dimen/_1sdp">


                    <LinearLayout
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:orientation="vertical"
                        android:background="@drawable/gradient_16"
                        android:padding="@dimen/_6sdp">



                    </LinearLayout>


                </androidx.cardview.widget.CardView>

和渐变类似

<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<gradient
    android:startColor="#5B86E5"
    android:endColor="#36D1DC"
    android:angle="180" />

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

CardView card_radius和渐变半径应为相同尺寸

答案 4 :(得分:0)

        <shape xmlns:android="http://schemas.android.com/apk/res/android">
    <gradient
        android:startColor="#004e92"
        android:endColor="#614385"
    
        android:angle="90" />
        <corners
            android:topRightRadius="10dp"
            android:bottomLeftRadius="10dp"
            android:bottomRightRadius="10dp"
            android:topLeftRadius="10dp">
    
        </corners>
    </shape>
    
    
    [![enter image description here][1]][1]
    
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:orientation="vertical"
        android:layout_height="match_parent"
        android:background="@drawable/color"
        tools:context=".MainActivity">
    
        <ScrollView
            android:layout_width="match_parent"
            android:layout_height="match_parent">
    
            <LinearLayout
                android:layout_width="match_parent"
                android:orientation="vertical"
                android:layout_height="match_parent">
    
                <androidx.cardview.widget.CardView
                    android:layout_width="match_parent"
                    android:layout_marginLeft="20dp"
                    android:layout_marginRight="20dp"
                    android:layout_marginTop="10dp"
                    app:cardCornerRadius="10dp"
                    android:layout_height="100dp">
                    <LinearLayout
                        android:layout_width="match_parent"
                        android:background="@drawable/cardcolor"
                        
                        android:layout_height="100dp">
    
                    </LinearLayout>
    
                </androidx.cardview.widget.CardView>
    
    
    
            </LinearLayout>
    
        </ScrollView>``
    
    </LinearLayout>
    [![enter image description here][1]][1]
    
    
      [1]: https://i.stack.imgur.com/iewIm.png


  [1]: https://i.stack.imgur.com/pHIlW.png