14

Lollipop 以前の CustomView で動作していましたが、Lollipop デバイスで適用しようとしandroid:elevationましandroid:translateZたが、動作しないようです。

<com.example.CustomView
    android:id="@+id/myview"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:elevation="10dp">
</com.example.CustomView>

何が欠けていますか?

4

1 に答える 1

35

シャドウとクリッピング ビューの定義で述べたように

シャドウ キャスティングとクリッピングに使用される をビルドするViewOutlineProvider抽象クラスを実装する必要があります。ViewOutline

長方形の CustomView

public class CustomView extends View {

    // ..

    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
       /// ..
       if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            setOutlineProvider(new CustomOutline(w, h));
       }
    }

    @TargetApi(Build.VERSION_CODES.LOLLIPOP)
    private class CustomOutline extends ViewOutlineProvider {

        int width; 
        int height;

        CustomOutline(int width, int height) {
            this.width = width;
            this.height = height;
        }

        @Override
        public void getOutline(View view, Outline outline) {
            outline.setRect(0, 0, width, height);
        }
    }

    //...
}

注: この機能は API21 でのみサポートされています。API21 より前のバージョンでは 9-patch を使用する必要があります。

于 2014-12-16T05:16:50.567 に答える