【发布时间】:2016-11-27 10:54:01
【问题描述】:
我想创建一个具有 底部 -> 左侧 -> 顶部 -> 右侧的渐变的 CircleView。
所以我像这样使用SweepGradient 的画布
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
Paint paint = new Paint();
int[] colors = {Color.GREEN, Color.RED};
float[] positions = {0, 1};
SweepGradient gradient = new SweepGradient(100, 100, colors, positions);
paint.setShader(gradient);
canvas.drawCircle(100, 100, 100, paint);
}
但默认顺序是 right -> bottom -> left -> top 但我想要 bottom -> left -> top -> right 我已经尝试将位置更改为
float[] positions = {0.25f, 1.25f};
但它只适用于AndroidStudio的Preview,当我在真实设备上运行时,它显示的结果与positions = {0, 1}相同
我怎样才能使SweepGradient 像这样从bottom -> left -> top -> right 渐变
--- 更新 ---
我们可以使用setLocalMatrix 为SweepGradient 像这样旋转渐变
Matrix matrix = new Matrix();
matrix.setRotate(90, 100, 100);
gradient.setLocalMatrix(matrix);
【问题讨论】:
-
使用
Shader#setLocalMatrix(Matrix localM) -
@pskink 不幸的是,
setLocalMatrix只能在预览模式下完美运行,在我的真实设备 API 19 中它无法运行 -
然后发布您的代码
-
@pskink 我已经更新了我的代码和真实设备的屏幕截图
-
@pskink 我发现了问题,setRotate(90) 在真实设备中不起作用,但 setRotate(90,100,100);工作。非常感谢
标签: android canvas sweepgradient