Android“提升”未在CustomView下显示阴影

前端之家收集整理的这篇文章主要介绍了Android“提升”未在CustomView下显示阴影前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个CustomView工作在前Lollipop,现在我尝试在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>

我错过了什么?

解决方法

Defining Shadows and Clipping Views所述

您应该实现ViewOutlineProvider抽象类,View构建其Outline,用于阴影投射和剪切

矩形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,width,height);
        }
    }

    //...
}

注意:此功能仅由API21支持,前API21应使用9-patch.

原文链接:https://www.f2er.com/android/314110.html

猜你在找的Android相关文章