Пользовательский вид для Android с ViewOutlineProvider добавляет белую рамку перед тенью - PullRequest
1 голос
/ 14 марта 2019

У меня есть пользовательский вид, где я рисую прямоугольник на холсте. Чтобы добавить тень / высоту к этому пользовательскому виду, я использую ViewOutlineProvider, как показано ниже:

private class CustomOutline extends ViewOutlineProvider {

    int width;
    int height;

    CustomOutline(int width, int height) {
        this.width = width;
        this.height = height;
    }

    @Override
    public void getOutline(View view, Outline outline) {
        outline.setRect(0, 0, width, height);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) {
            outline.offset(5,5);
        }
    }
}

И вызов setOutlineProvider при изменении размера представления.

@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
    super.onSizeChanged(w, h, oldw, oldh);

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        setOutlineProvider(new CustomOutline(w, h));
    }
}

Я получаю тень, как показано на скриншоте ниже. Если вы внимательно заметите, вы найдете белую линию перед тенью (между красным прямоугольником и его тенью). Я борюсь с парой вещей, хотя

  • Как я могу удалить эту белую линию?
  • Как заставить тень показываться и на верхней стороне?
  • Также есть ли способ предотвратить пикселизацию, когда угол обзора находится под углом?

enter image description here

...