1

(Android の SystemUI パッケージの一部として) フルスクリーンで表示される FrameLayout に基づくカスタム ビューがあり、キャンバスを使用していくつかのものを描画します。

ここで、このビューの 1 つの要素 (私が描いた円の 1 つ) に何らかの影を落としてもらいたいと考えています。そのため、カスタム アウトラインを追加して、フレームワークが影をレンダリングできるようにしました。残念ながら、この影はちょっと奇妙に見えます (円形の線を囲んでいます)。この問題の原因については、私にはまったくわかりません。

誰かが同様の問題に直面したか、これを解決する方法を知っていますか? ありがとう!

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