1

我有一个基于全屏显示的 FrameLayout 的自定义视图(作为 Android 的 SystemUI 包的一部分),我使用画布绘制一些东西。

现在我想要这个视图中的一个元素(我画的一个圆圈)来投射某种阴影。所以我添加了一个自定义轮廓,让框架为我渲染阴影。不幸的是,这个阴影看起来有点奇怪(围绕圆形线),我对可能导致这个问题的原因一无所知。

有没有人遇到过类似的问题或知道如何解决这个问题?谢谢!

MWE:

public class Menu extends FrameLayout {

    private int mRadius;

    public Menu(Context context) {
        super(context);

        mRadius = context.getResources()
            .getDimensionPixelSize(R.dimen.menu_radius);

        setElevation(context.getResources()
                .getDimensionPixelSize(R.dimen.menu_elevation));
    }

    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        setOutlineProvider(new CustomOutline(w, h));
    }

    private class CustomOutline extends ViewOutlineProvider {

        private int mWidth;
        private int mHeight;

        public CustomOutline(int w, int h) {
            mWidth = w;
            mHeight = h;
        }

        @Override
        public void getOutline(View view, Outline outline) {
            outline.setOval(-mRadius, -mRadius, mRadius, mRadius);
            outline.offset(mWidth/2, mHeight/2);
        }
    }
}

奇怪的影子:

奇怪的仰角阴影

4

1 回答 1

2

你的代码没有问题,高程阴影是这样由系统绘制的。仅当您在其上绘制的形状透明或半透明时,这些伪影才可见。一个不透明的形状将覆盖它们,就像在这个例子中一样:

不透明形状的高程阴影

于 2018-04-01T22:11:20.170 回答