2015-09-15 5 views
1

Если я добавлю возвышение к небольшому, широкому представлению на Android 5.0, тень выглядит действительно странно. Однако на Android 5.1 он выглядит нормально. Для примера, посмотрите на следующее изображение сравнения (нажмите для просмотра в полном разрешении):Тень маленького, широкого вида выглядит странно на Android 5.0, но не на 5.1

Comparison between 5.0 and 5.1

На 5.1 форма тени однородна, в то время как на 5.0 она становится тоньше к краям экрана. Чем тоньше (т. Е. Меньше) вид, тем более очевидным является эффект.

Я не уверен, что это ошибка в обеих версиях, однако мне нужна тень, чтобы посмотреть на обе версии, как это выглядит на 5.1 сейчас.

+0

не совсем уверен, как выглядит «странно», не могли бы вы объяснить, пожалуйста, более подробно – tyczj

+0

Пожалуйста, взгляните на сравнительное изображение (нажмите на него, чтобы посмотреть в полном разрешении). На 5.1 форма тени однородна, а в 5.0 она становится тоньше по краям экрана. –

+0

Способ отображения теней слегка изменился между версиями ОС. Для изменения этого поведения нет API-интерфейса разработчика. Вы не сможете изменить его, не избегая использования фреймворческих теней. – alanv

ответ

1

Вот хакерство, частичное обходное решение. Форма тени зависит от высоты представления или, точнее, от высоты контура. Итак, мы собираемся установить пользовательский контур следующим образом:

view.setOutlineProvider(new ViewOutlineProvider() { 
    @Override 
    public void getOutline(final View view, final Outline outline) { 
     outline.setRect(0, -128, view.getWidth(), view.getHeight()); 
    } 
}); 

Вместо -128 выбрать любое достаточное большое количество (или даже лучше, загрузите значение размера из ресурсов). Вот как он выглядит:

enter image description here

К сожалению, этот хак вызывает странные артефакты быть оказаны выше точки зрения. Однако они не будут видны, если у вас есть другое представление (например, панель инструментов) над ним. Возможно, можно скопировать артефакты, поместив представление в отдельный макет и играя с его границами.