39

我想要类似下面的图片

在此处输入图像描述

我尝试使用可绘制的形状

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >
<gradient
    android:angle="360"
    android:centerX="50%"
    android:centerY="50%"

    android:gradientRadius="50%"
    android:endColor="#000000"
    android:centerColor="#FFFFFF"
    android:startColor="#000000" >
</gradient>
</shape> 
4

5 回答 5

89

在您的可绘制文件夹中创建一个新的 Android xml 文件(比如 GreyRadial.xml)文件

在你的 xml 文件中

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle" >

    <gradient
        android:centerColor="#c1c1c1"
        android:endColor="#4f4f4f"
        android:gradientRadius="400"
        android:startColor="#c1c1c1"
        android:type="radial" >
    </gradient>

</shape>

在您的布局背景中使用此 xml

android:background="@drawable/GreyRadial"
于 2013-10-23T13:15:43.207 回答
18

可以使用多个矩形形状在层列表中近似该效果。使用具有中心背景颜色的实心矩形。然后使用开始和结束颜色相同的两个渐变。使中心颜色也相同,除了将 alpha 设置为零。

在下面的代码中,颜色如下:

@color/background_dark = #ffb8860b
@color/background_light = #ffd2b48c
@color/transparent = #00b8860b

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item>
        <shape >
            <solid android:color="@color/background_light"/>
        </shape>
    </item>

    <item>
        <shape>
            <gradient 
                android:startColor="@color/background_dark"
                android:centerColor="@color/transparent"
                android:endColor="@color/background_dark"
                android:angle="45"/>
        </shape>
    </item>

    <item>
        <shape>
            <gradient 
                android:startColor="@color/background_dark"
                android:centerColor="@color/transparent"
                android:endColor="@color/background_dark"
                android:angle="135"/>
        </shape>
    </item>

</layer-list>
于 2014-07-11T19:02:27.873 回答
13

另一种解决方案:

<shape xmlns:android="http://schemas.android.com/apk/res/android"
       android:shape="rectangle">
    <gradient
        android:centerX="50%"
        android:centerY="50%"
        android:endColor="@android:color/black"
        android:gradientRadius="100%"
        android:startColor="@android:color/transparent"
        android:type="radial"/>
</shape>
于 2017-05-10T13:22:24.350 回答
3

如果您需要的椭圆的纵横比是固定的,那么您可以使用渐变可绘制对象作为背景,并使用 scaleX 或 scaleY 将其拉伸成椭圆。

可绘制 myradial.xml:

   <?xml version="1.0" encoding="utf-8"?>
   <shape xmlns:android="http://schemas.android.com/apk/res/android"
          android:shape="rectangle">
       <!--Radial gradient centered at middle of top with glow color-->
       <gradient
           android:startColor="FF336699"
           android:endColor="00000000"
           android:centerX="50%"
           android:centerY="50%"
           android:gradientRadius="50%"
           android:type="radial"/>
   </shape>

使用它作为背景查看

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

如果纵横比不固定,仍然可以在运行时在代码中设置 scaleX。

这并不适用于所有情况下的每个人。它可以制作棘手的布局。一件好事是它是一个单一的渲染通道,与在实体上发布 2 个线性渐变的非常优雅的解决方案的 3 个通道相比。它还可以用于拉伸任何渐变,例如以 22.5 度角创建线性渐变。

于 2017-10-11T15:44:42.780 回答
1

这是我对问题的解决方案。

<shape android:shape="rectangle">

 <gradient
     android:endColor="@color/your_dark_color"
     android:startColor="@color/your_light_color"
     android:type="radial"
     android:gradientRadius="700"/>

通过改变 I 的值,android:gradientRadius我能够得到准确的结果。

于 2015-11-13T11:49:43.303 回答