Android 如何在画布上用alpha渐变绘制圆形?

Android 如何在画布上用alpha渐变绘制圆形?,android,android-canvas,Android,Android Canvas,如何使用alpha渐变在画布上绘制此图片? 下次请指定您是指android浏览器上的android应用程序画布还是HTML5画布。如果是前者,请使用。这个解决方案是JS的,因为它更容易显示,并且可以在任何一个平台上正常工作 画布中沿路径的渐变是硬的。最简单的方法就是捏造它 不要将图像视为沿着圆形路径的渐变,而是将其视为两个线性渐变 一个在左边,从绿色到灰色,从上到下 另一个在右边,从白色到灰色,从上到下 想象一个由这两个梯度组成的正方形: 现在想象一个圆圈穿过: 这就是你要做的 像这样“

如何使用alpha渐变在画布上绘制此图片?

下次请指定您是指android浏览器上的android应用程序画布还是HTML5画布。如果是前者,请使用。这个解决方案是JS的,因为它更容易显示,并且可以在任何一个平台上正常工作

画布中沿路径的渐变是硬的。最简单的方法就是捏造它

不要将图像视为沿着圆形路径的渐变,而是将其视为两个线性渐变

  • 一个在左边,从绿色到灰色,从上到下
  • 另一个在右边,从白色到灰色,从上到下
想象一个由这两个梯度组成的正方形:

现在想象一个圆圈穿过:

这就是你要做的

像这样“剪切”是最容易使用剪切区域的,所以我举了一个例子

下面是一个活生生的例子:

代码如下:

var greenPart = ctx.createLinearGradient(0,0,0,100);
greenPart.addColorStop(0, 'palegreen');
greenPart.addColorStop(1, 'lightgray');

var whitePart = ctx.createLinearGradient(0,0,0,100);
whitePart.addColorStop(0, 'white');
whitePart.addColorStop(1, 'lightgray');


var width = 20;
ctx.lineWidth = width;

// First we make a clipping region for the left half
ctx.save();
ctx.beginPath();
ctx.rect(-width, -width, 50+width, 100 + width*2);
ctx.clip();

// Then we draw the left half
ctx.strokeStyle = greenPart;
ctx.beginPath();
ctx.arc(50,50,50,0,Math.PI*2, false);
ctx.stroke();

ctx.restore(); // restore clipping region to default

// Then we make a clipping region for the right half
ctx.save();
ctx.beginPath();
ctx.rect(50, -width, 50+width, 100 + width*2);
ctx.clip();

// Then we draw the right half
ctx.strokeStyle = whitePart;
ctx.beginPath();
ctx.arc(50,50,50,0,Math.PI*2, false);
ctx.stroke();

ctx.restore(); // restore clipping region to default

请下次指定您是指android浏览器上的android应用程序画布还是HTML5画布。如果是前者,请使用。这个解决方案是JS的,因为它更容易显示,并且可以在任何一个平台上正常工作

画布中沿路径的渐变是硬的。最简单的方法就是捏造它

不要将图像视为沿着圆形路径的渐变,而是将其视为两个线性渐变

  • 一个在左边,从绿色到灰色,从上到下
  • 另一个在右边,从白色到灰色,从上到下
想象一个由这两个梯度组成的正方形:

现在想象一个圆圈穿过:

这就是你要做的

像这样“剪切”是最容易使用剪切区域的,所以我举了一个例子

下面是一个活生生的例子:

代码如下:

var greenPart = ctx.createLinearGradient(0,0,0,100);
greenPart.addColorStop(0, 'palegreen');
greenPart.addColorStop(1, 'lightgray');

var whitePart = ctx.createLinearGradient(0,0,0,100);
whitePart.addColorStop(0, 'white');
whitePart.addColorStop(1, 'lightgray');


var width = 20;
ctx.lineWidth = width;

// First we make a clipping region for the left half
ctx.save();
ctx.beginPath();
ctx.rect(-width, -width, 50+width, 100 + width*2);
ctx.clip();

// Then we draw the left half
ctx.strokeStyle = greenPart;
ctx.beginPath();
ctx.arc(50,50,50,0,Math.PI*2, false);
ctx.stroke();

ctx.restore(); // restore clipping region to default

// Then we make a clipping region for the right half
ctx.save();
ctx.beginPath();
ctx.rect(50, -width, 50+width, 100 + width*2);
ctx.clip();

// Then we draw the right half
ctx.strokeStyle = whitePart;
ctx.beginPath();
ctx.arc(50,50,50,0,Math.PI*2, false);
ctx.stroke();

ctx.restore(); // restore clipping region to default