Как использовать 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);
}