Android - 轻量渐变
Android - Lightweight Gradients
来自 Android 的开发者参考:
LinearGradient(float x0, float y0, float x1, float y1, int[] colors, float[] positions, Shader.TileMode tile)
所以我想知道在onDraw()
方法中是否有绘制渐变的方法?
这里的问题是我需要输入坐标来绘制渐变。如果我需要在不同大小和位置的多个形状上使用相同的渐变怎么办?更重要的是,如果我绘制渐变的形状改变了它的位置怎么办?甚至 Android Studio 也建议您不要在 onDraw()
方法中对变量进行初始化。
谢谢!
我能做的是在 .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);
如果有人知道 easier/more 灵活的方法,请告诉我!
来自 Android 的开发者参考:
LinearGradient(float x0, float y0, float x1, float y1, int[] colors, float[] positions, Shader.TileMode tile)
所以我想知道在onDraw()
方法中是否有绘制渐变的方法?
这里的问题是我需要输入坐标来绘制渐变。如果我需要在不同大小和位置的多个形状上使用相同的渐变怎么办?更重要的是,如果我绘制渐变的形状改变了它的位置怎么办?甚至 Android Studio 也建议您不要在 onDraw()
方法中对变量进行初始化。
谢谢!
我能做的是在 .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);
如果有人知道 easier/more 灵活的方法,请告诉我!