(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);
}
}
}
奇妙に見える影: