Как использовать setOutlineProvider вместо setOutline в Lollipop
Для более раннего L Preview были некоторые примеры, как показано ниже, чтобы добавить к вашему коду, чтобы использовать кнопку FAB (плавающее действие).
Но, к сожалению, я не могу использовать тот же код для реализации FAB из-за того, что метод setOutline больше не поддерживается, но, похоже, он был заменен альтернативным методом "fab.setOutlineProvider(ViewOutlineProvider);". может ли кто-нибудь объяснить, как это использовать?...
Возможно, что-то действительно просто, что мне не хватает, но любая помощь будет очень оценена.
// Outline
int size = getResources().getDimensionPixelSize(R.dimen.fab_size);
Outline outline = new Outline();
outline.setOval(0, 0, size, size);
Button fab = (Button) findViewById(R.id.fab);
fab.setOutline(outline);
fab.setClipToOutline(true);
Ответы
Ответ 1
Просто для завершения ответа @ianhanniballake:
Button fab = (Button) findViewById(R.id.fab);
//Outline outline = new Outline();
//outline.setOval(0, 0, size, size);
//fab.setOutline(outline);
ViewOutlineProvider viewOutlineProvider = new ViewOutlineProvider() {
@Override
public void getOutline(View view, Outline outline) {
// Or read size directly from the view width/height
int size = getResources().getDimensionPixelSize(R.dimen.fab_size);
outline.setOval(0, 0, size, size);
}
};
fab.setOutlineProvider(viewOutlineProvider);
Ответ 2
Per настройка теней теней и контуры обучения:
Вы можете создать овальные и прямоугольные контуры с закругленными углами, используя методы класса Outline. Поставщик контуров по умолчанию для представлений получает контур из фона представления. Чтобы предотвратить просмотр из тени, установите его провайдер контуров равным null.
Таким образом, ваш ViewOutlineProvider
просто должен вызвать setOval(0, 0, size, size)
в параметре outline
на getOutline()
:
public void getOutline (View view, Outline outline) {
// Or read size directly from the view width/height
int size = getResources().getDimensionPixelSize(R.dimen.fab_size);
outline.setOval(0, 0, size, size);
}