在画布上绘制渐变形状

时间:2014-01-11 00:59:10

标签: android xml android-canvas

在画布上绘制一个具有1种基本颜色的矩形很容易。但是,我需要能够绘制一个渐变的形状,该渐变以一种颜色开始并均匀地移动到另一种颜色。

我习惯使用xml文件绘制渐变背景。在将形状绘制到画布时,有没有办法引用xml文件?或者有更好的方法来绘制渐变形状?

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true">
        <layer-list>
            <item>
                <shape>
                     <!--  Gradient Bg for Button -->
                     <gradient
                          android:startColor="@color/button_type1_pushed"
                          android:endColor="@color/button_type1_pushed"
                          android:angle="270" />
                     <stroke
                          android:width="0.05dp"
                          android:color="@color/button_type1_border"/>
                </shape>
            </item>
        </layer-list>
    </item>

    <item android:state_enabled="true">
        <layer-list>
            <item>
                <shape android:shape="rectangle">
                    <gradient
                         android:startColor="@color/button_type1_normal"
                         android:endColor="@color/button_type1_normal"
                         android:angle="90" />
                    <stroke
                         android:width="0.05dp"
                         android:color="@color/button_type1_border"/>    
                </shape>
            </item>
        </layer-list>
    </item>
</selector>

2 个答案:

答案 0 :(得分:2)

您必须在paint元素中创建一个着色器作为LinearGradient,然后在画布中绘制一个矩形。

您可以通过绘制矩形的方式获得水平和垂直渐变。

您可以看到代码示例here

答案 1 :(得分:1)

您可以将xml加载到Drawable并在画布上绘制:

Drawable drawable = context.getResources().getDrawable(R.drawable.your_drawable);
drawable.draw(canvas);

详见documentation