web-dev-qa-db-ja.com

LollipopでsetOutlineの代わりにsetOutlineProviderを使用する方法

以前のLプレビューでは、FAB(フローティングアクションボタン)を使用するためにコードに追加する以下のような例がいくつかありました。

しかし、残念ながら、setOutlineメソッドがサポートされなくなったため、同じコードを使用してFABを実装することはできませんが、代替メソッド '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);
11
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);
29

あたり ビューシャドウとアウトライントレーニングのカスタマイズ

Outline クラスのメソッドを使用して、角が丸い楕円形および長方形のアウトラインを作成できます。ビューのデフォルトのアウトラインプロバイダーは、ビューの背景からアウトラインを取得します。ビューが影を落とさないようにするには、そのアウトラインプロバイダーをnullに設定します。

したがって、ViewOutlineProvideroutlineパラメータでsetOval(0, 0, size, size)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);
}
11
ianhanniballake

すべてのビューには、OutlineオブジェクトとViewOutlineProvider(V.O.P)オブジェクトがあります。名前が示すように、viewoutlineproviderは間接的にビューにアウトラインを提供します。

ビューが行うことは、アウトラインオブジェクトをV.O.Pに渡し、V.O.Pがそれを更新することです。

したがって、VOPのgetOutlineメソッドにビューのOutlineオブジェクトがパラメーターとして含まれているので、それを更新するだけです。

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