Pha*_*inh 2 android canvas sweepgradient
我想创建一个带有渐变的CircleView - > left - > top - > right.
所以我用帆布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);
}
Run Code Online (Sandbox Code Playgroud)
但是这个的默认顺序是正确的 - >底部 - >左边 - >顶部但是我想底部 - >左边 - >顶部 - >右边 我试过改变位置到
float[] positions = {0.25f, 1.25f};
Run Code Online (Sandbox Code Playgroud)
但它只适用于Preview
AndroidStudio,当我在真实设备中运行时,它显示的结果与positions = {0, 1}
我怎样才能像这样制作SweepGradient
渐变bottom -> left -> top -> right
--- UPDATE ---
我们可以使用setLocalMatrix
了SweepGradient
这样的旋转渐变
Matrix matrix = new Matrix();
matrix.setRotate(90, 100, 100);
gradient.setLocalMatrix(matrix);
Run Code Online (Sandbox Code Playgroud)
在绘制圆之前旋转画布.
public class CircleView extends View {
private Paint paint;
public CircleView(Context context) {
super(context);
init();
}
public CircleView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public CircleView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
public void init() {
paint = new Paint();
int[] colors = {Color.GREEN, Color.RED};
float[] positions = {0, 1};
SweepGradient gradient = new SweepGradient(100, 100, colors, positions);
paint.setShader(gradient);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.save();
canvas.rotate(90, 100, 100);
canvas.drawCircle(100, 100, 100, paint);
canvas.restore();
}
}
Run Code Online (Sandbox Code Playgroud)
编辑-1:@ pkskink
建议的替代方法是使用如下:setLocalMatrix
public void init() {
int[] colors = {Color.GREEN, Color.RED};
float[] positions = {0, 1};
Matrix matrix = new Matrix();
matrix.postRotate(90, 100, 100);
Shader gradient = new SweepGradient(100, 100, colors, positions);
gradient.setLocalMatrix(matrix);
paint = new Paint();
paint.setShader(gradient);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawCircle(100, 100, 100, paint);
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1808 次 |
最近记录: |