Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 添加阴影时绘制的不同结果(绘制路径)_Android - Fatal编程技术网

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中设置的颜色被忽略,只计算油漆的颜色。但我需要把路径漆成绿色和红色,但阴影要变成黑色。你们知道如何使用两种油漆吗?