Android 添加阴影时绘制的不同结果(绘制路径)
当我有此代码添加阴影时:Android 添加阴影时绘制的不同结果(绘制路径),android,Android,当我有此代码添加阴影时: // set shadow paint.setShadowLayer(2, 1, 1, Color.BLACK); // Important for certain APIs setLayerType(LAYER_TYPE_SOFTWARE, paint); // set shadow paint.setShadowLayer(2, 1, 1, Color.BLACK); 我明白了: 当我有此代码添加阴影时: // set shadow paint.setShad
// set shadow
paint.setShadowLayer(2, 1, 1, Color.BLACK);
// Important for certain APIs
setLayerType(LAYER_TYPE_SOFTWARE, paint);
// set shadow
paint.setShadowLayer(2, 1, 1, Color.BLACK);
我明白了:
当我有此代码添加阴影时:
// set shadow
paint.setShadowLayer(2, 1, 1, Color.BLACK);
// Important for certain APIs
setLayerType(LAYER_TYPE_SOFTWARE, paint);
// set shadow
paint.setShadowLayer(2, 1, 1, Color.BLACK);
我明白了:
你能看见吗?在第二张图片上它模糊了,但是这个饼状图看起来和它应该看起来的一样。另一方面,第一张图片有很好的阴影,但却是一团糟。为什么?
PS:如果我不设置任何阴影,图形就不会模糊,也不会混乱。但我需要把那个影子带到那里
编辑:
要绘制图表的类:
public class MyGraphView extends View {
public static final int PADDING = 4;
private Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
private float[] value_degree;
int strokeWidth;
private int[] COLORS = { Color.parseColor("#47B243"),
Color.parseColor("#DB262A") };
// size of bigger half circle
RectF rectf = new RectF(2, 2, 62, 62);
// size of smaller half circle
RectF rectf2 = new RectF(9, 9, 55, 55);
// size of the smallest half circle
RectF rectf3 = new RectF(16, 16, 48, 48);
int temp = 0;
public MyGraphView(Context context, float[] values, int size) {
super(context);
// setting up size of pie chart dynamically
int difference = size / 9;
rectf.set(PADDING, PADDING, size + PADDING, size + PADDING);
rectf2.set(difference + PADDING, difference + PADDING, size
- difference + PADDING, size - difference + PADDING);
rectf3.set(difference * 2 + PADDING, difference * 2 + PADDING, size
- difference * 2 + PADDING, size - difference * 2 +
PADDING);
// setting up brush size
strokeWidth = size / 15;
// assign degrees of agree and disagree to array
value_degree = new float[values.length];
for (int i = 0; i < values.length; i++) {
value_degree[i] = values[i];
}
}
@Override
protected void onDraw(Canvas canvas) {
// TODO Auto-generated method stub
super.onDraw(canvas);
for (int i = 0; i < value_degree.length; i++) {
// set type of "brush"
paint.setStrokeWidth(strokeWidth);
paint.setStyle(Paint.Style.STROKE);
// set shadow
paint.setShadowLayer(2, 1, 1, Color.BLACK);
// Important for certain APIs
// setLayerType(LAYER_TYPE_SOFTWARE, paint);
// agree
if (i == 0) {
final Path path = new Path();
paint.setColor(COLORS[i]);
// draw 3 paths to show 3 curves
path.addArc(rectf, 180, value_degree[i] - 4);
path.addArc(rectf2, 180, value_degree[i] - 5);
path.addArc(rectf3, 180, value_degree[i] - 6);
// draw the path
canvas.drawPath(path, paint);
// disagree
} else {
temp += (int) value_degree[i - 1];
paint.setColor(COLORS[i]);
final Path path = new Path();
path.addArc(rectf, temp + 180 + 4, value_degree[i] - 4);
path.addArc(rectf2, temp + 180 + 5, value_degree[i] - 5);
path.addArc(rectf3, temp + 180 + 6, value_degree[i] - 6);
// draw the path
canvas.drawPath(path, paint);
}
}
}
}
红色部分继续在该圆圈轨迹中运行绘图。
setShadowLayer
在硬件加速模式下不受支持
因此,您应该使用
setLayerType(LAYER\u TYPE\u software,null)将视图设置为软件代码>并且它应该工作得很好。也许你在画画方面有什么毛病?我发现了。方法setLayerType(层类型软件,空)在我将图形分配给线性布局的活动中,应调用代码>,因此结果为:
myLinearLayout.setLayerType(LAYER_TYPE_SOFTWARE, null);
你能给我看更多的绘图代码吗?@Jedil我已经画了,请帮我:)。我一直把它作为LAYER_TYPE_软件,如果我写null而不是画图,它会一直画红色部分,检查我在问题中的第二次编辑。请继续尝试,谢谢。添加setLayerType(LAYER\u TYPE\u软件,空)代码>就在您的绘图路径(..)
方法之前没有帮助,结果相同;/它看起来像一个旋转器。但是如果没有那条线,它看起来还可以。。为什么?很难说,尝试使用不同的绘制对象,如果不起作用,可以使用一个路径对象并重置它(我现在猜)。另一件与您的问题无关的事情是,在onDraw方法中创建新路径会浪费处理器/内存时间。我应该在哪里创建路径呢?我尝试了一些油漆的东西,所以请耐心,然后编辑一点你的答案,我将其标记为正确。我只是不知道如何为drawPath()指定两种颜色。因为我发现setShadowLayer中设置的颜色被忽略,只计算油漆的颜色。但我需要把路径漆成绿色和红色,但阴影要变成黑色。你们知道如何使用两种油漆吗?