Kau*_* NP 17 android gradient drawable sweepgradient
我在Android上遇到了Sweep Gradient,如果它可以让我更好地控制色彩间距和过渡,那么我很感兴趣.做了快速搜索,发现几乎没有任何关于它!
我发现的唯一一些参考文献(并且它们不符合接近正确或全面解释的标准)如下所示:
几乎就是这样.其他人则相似或贬低.
到目前为止我得出的结论很少(也许是错误的):
我知道人们可能会认为这不是一个真正的技术问题.但是对于我使用Sweep Gradients或至少知道它们的意思,描述必须来自某个地方.并请提供一些答案的例子在环比其它情况下,扫描的使用.
Att*_*nyi 25
在此上下文中的单词渐变(如在许多图形编辑器中,包括Photoshop)指的是多种颜色之间的平滑过渡,而不是仅使用单一颜色来填充区域.
在Android API提供3个不同梯度:LinearGradient,RadialGradient和SweepGradient.
这些都是Shader.的子类.您可以Shader在Paint对象上设置,然后使用它绘制任何形状Paint.根据渐变的类型,形状将在它们之间填充颜色和过渡.
例如:
可以使用以下代码生成此图像:
Bitmap test = Bitmap.createBitmap(640, 200, Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(test);
{ // draw a dark gray background
Paint backgroundPaint = new Paint();
backgroundPaint.setARGB(255, 24, 24, 24);
c.drawPaint(backgroundPaint);
}
Path heart = new Path();
{ // prepare a heart shape
heart.moveTo(110, 175);
heart.lineTo(10, 75);
RectF leftCircle = new RectF(10, 25, 110, 125);
heart.arcTo(leftCircle, 180, 180);
RectF rightCircle = new RectF(110, 25, 210, 125);
heart.arcTo(rightCircle, 180, 180);
heart.close();
}
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
paint.setTextSize(18f);
int[] colors = {
0xFFFFFF88, // yellow
0xFF0088FF, // blue
0xFF000000, // black
0xFFFFFF88 // yellow
};
float[] positions = {0.0f, 0.33f, 0.66f, 1.0f};
{ // draw the left heart
SweepGradient sweepGradient;
{ // initialize the sweep gradient
sweepGradient = new SweepGradient(50, 50, colors, positions);
paint.setShader(sweepGradient);
}
c.drawPath(heart, paint);
c.drawText("SweepGradient", 50, 190, paint);
}
{ // draw the middle heart
LinearGradient linearGradient;
{ // initialize a linear gradient
linearGradient = new LinearGradient(250, 0, 350, 150, colors, positions, Shader.TileMode.CLAMP);
paint.setShader(linearGradient);
}
heart.offset(210, 0); // move the heart shape to the middle
c.drawPath(heart, paint);
c.drawText("LinearGradient", 260, 190, paint);
}
{ // draw the right heart
RadialGradient radialGradient;
{ // initialize a linear gradient
radialGradient = new RadialGradient(550, 50, 100, colors, positions, Shader.TileMode.CLAMP);
paint.setShader(radialGradient);
}
heart.offset(210, 0); // move the heart shape to the right
c.drawPath(heart, paint);
c.drawText("RadialGradient", 470, 190, paint);
}
{ // save the bitmap
String filename = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "test.png";
FileOutputStream out = null;
try {
out = new FileOutputStream(filename);
test.compress(Bitmap.CompressFormat.PNG, 90, out);
} catch (Exception e) {
} finally {
try {
out.close();
} catch (Exception e) {
}
}
}
Run Code Online (Sandbox Code Playgroud)
所以LinearGradient是Linear Gradient在Photoshop中,RadialGradient是Radial Gradient和SweepGradient是Angular Gradient,在你的第三个参考.我建议首先在图像编辑器中尝试这些(所有流行的图像编辑器都有这些工具),您将很快了解它们的工作原理.
您也可以在XML drawable中使用这些渐变(如第4个参考中所示),但最多使用3种颜色的限制.
在a中SweepGradient,当提供位置时,0.0点位于3点钟位置,顺时针方向(0.25点位于6点钟位置,0.5点位于9点钟位置,0.75点位于12点位置,1.0点位于3点钟位置时钟).
关于你的结论:
SweepGradient而不是环形绘制.甚至标签也是使用上面示例中的渐变绘制的.SweepGradient非常相似LinearGradient,除了你不需要提供一个TileMode,因为你不能在你的颜色列表的边界之外运行.我希望这能搞清楚.
| 归档时间: |
|
| 查看次数: |
6436 次 |
| 最近记录: |