it-swarm.com.ru

Как использовать setOutlineProvider вместо setOutline в Lollipop

Для более раннего L Preview было несколько примеров, как показано ниже, для добавления в ваш код для использования FAB (Floating Action Button).

Но, к сожалению, я не могу использовать этот же код для реализации 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);
10
Smiler

Просто чтобы завершить ответ @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's width/height
            int size = getResources().getDimensionPixelSize(R.dimen.fab_size);
            outline.setOval(0, 0, size, size);
        }
    };
fab.setOutlineProvider(viewOutlineProvider);
28
Gabriele Mariotti

По настройка вида теней и контуров обучения :

Вы можете создать овальные и прямоугольные контуры с закругленными углами, используя методы в классе Outline . Поставщик структуры по умолчанию для представлений получает схему из фона представления. Чтобы вид не отбрасывал тень, установите для его поставщика структуры значение null.

Так что вашему ViewOutlineProvider нужно просто вызвать setOval(0, 0, size, size) для параметра outline в getOutline():

public void getOutline (View view, Outline outline) {
    // Or read size directly from the view's width/height
    int size = getResources().getDimensionPixelSize(R.dimen.fab_size);
    outline.setOval(0, 0, size, size);
}
9
ianhanniballake

Каждое представление имеет объект Outline и объект ViewOutlineProvider (V.O.P). Как следует из названия, viewoutlineprovider косвенно предоставляет схему представлению.

Что делает представление, так это то, что оно передает свой контурный объект в V.O.P, а V.O.P обновляет его.

поэтому в качестве параметра у вас есть объект Outline представления в методе getOutline VOP, просто обновите его.

ViewOutlineProvider viewOutlineProvider = new ViewOutlineProvider() {
    @Override
    public void getOutline(View view, Outline outline) {
        outline.setOval(0, 0, view.getWidth(), view.getHeight());
    }
};
fab.setOutlineProvider(viewOutlineProvider);
0
arksun