Android-轻量级渐变

时间:2018-08-05 02:54:57

标签: android canvas gradient ondraw

摘自Android开发者参考:

LinearGradient(float x0, float y0, float x1, float y1, int[] colors, float[] positions, Shader.TileMode tile)

所以我想知道是否有一种方法可以在onDraw()方法中绘制渐变? 这里的问题是我需要输入要绘制渐变的坐标。如果在大小和位置不同的多种形状上需要相同的梯度怎么办?更重要的是,如果我在上面绘制渐变的形状会改变其位置呢?甚至Android Studio都建议您不要在onDraw()方法内初始化变量。

谢谢!

1 个答案:

答案 0 :(得分:0)

我能做的是在.xml文件中创建带有渐变的图形。

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape>
            <gradient
                android:startColor="@android:color/holo_blue_light"
                android:endColor="@android:color/holo_red_dark"
                android:angle="45"/>
        </shape>
    </item>
</selector>

然后在您的onDraw()中做(显然是在init函数中,因为您只需要初始化一次,至少我这样做了):

Drawable d = ContextCompat.getDrawable(context, R.drawable.indicator_active);

并绘制它,只需

d.setBounds(l, t, r, b);
d.draw(canvas);

如果有人知道更简单/更灵活的方式,请告诉我!