自定义绘制视图的阴影颜色出现奇怪问题

时间:2018-06-01 04:40:49

标签: android android-canvas draw shadow

我想在自定义绘制的形状中添加阴影。使用画布上的路径绘制此形状。

我更喜欢这些链接:

  1. Creating a shadow around a canvas drawn shape?
  2. Drawing an outer shadow when drawing an image
  3. Extending Android View class to add a dropshadow
  4. 我使用以下方式实现了阴影效果:

    paint.setShadowLayer(20, 0, 0, Color.GRAY);
    setLayerType(LAYER_TYPE_SOFTWARE, paint);
    

    但我面临一个阴影色的奇怪问题。阴影未以给定颜色显示,但显示用于形状的渐变颜色。

    我的完整代码:

    public class MyDrawView  extends View {
        private static final int RADIUS = 20;
    
        Path path = new Path();
        Path path1 = new Path();
        Path path2 = new Path();
    
        Paint paint = new Paint();
        Paint paint1 = new Paint();
        Paint paint2 = new Paint();
    
        public MyDrawView(Context context) {
            super(context);
    
            paint.setShadowLayer(20, 0, 0, Color.GRAY);
            setLayerType(LAYER_TYPE_SOFTWARE, paint);
    
        }
    
        @Override
        protected void onSizeChanged(int w, int h, int oldw, int oldh) {
    
            path.moveTo(0, 0);
            path.rLineTo(w, 0);
            path.rLineTo(0, 170);
            path.rLineTo(-w/5 + RADIUS, 0);
            RectF oval = new RectF();
            oval.set(w/5, 170 - 2 * RADIUS, w/5 + 2 * RADIUS, 170);
            path.arcTo(oval, 90, 90);
            path.rLineTo(0, -170 / 2 + 2 * RADIUS);
            oval.set(w/5 - 2 * RADIUS, 170 / 2, w/5, 170 / 2 + 2 * RADIUS);
            path.arcTo(oval, 0, -90);
            path.rLineTo(-w -w/5 + RADIUS, 0);
            path.close();
            paint.setShader(new LinearGradient(0 ,0 ,w, 170, Color.BLUE, Color.CYAN, Shader.TileMode.CLAMP));
    
        }
    
        @Override
        protected void onDraw(Canvas canvas) {
    
            canvas.drawPath(path, paint);
    
        }
    }
    

    由于我在形状上使用了BLUE和CYAN,我只能使用这种颜色获得阴影。我想要一种颜色作为机器人的正常阴影颜色,如灰色或黑色。

    另外我想问一下我使用这个视图作为标题所以我想在这个上使用一些图像和文字如何实现这个目标?

    请提出任何建议。谢谢。

0 个答案:

没有答案