Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/221.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何实现棒棒糖前的材料设计标高_Android_Material Design_Android Appcompat_Android Elevation - Fatal编程技术网

Android 如何实现棒棒糖前的材料设计标高

Android 如何实现棒棒糖前的材料设计标高,android,material-design,android-appcompat,android-elevation,Android,Material Design,Android Appcompat,Android Elevation,谷歌已经展示了一些在棒棒糖上显示提升效果的好方法 对于按钮 android:stateListAnimator="@anim/button_state_list_animator" 在没有第三方库的情况下,如何在棒棒糖前的版本上模拟标高效果?你不能用官方方法模拟棒棒糖前的标高 您可以使用一些可绘制图形在组件中生成阴影。例如,谷歌在CardView中使用这种方式 ViewCompat.setElevation(View,int)当前仅在API21+上创建阴影。如果检查隐藏的代码,此方法将调用:

谷歌已经展示了一些在棒棒糖上显示提升效果的好方法

对于按钮

android:stateListAnimator="@anim/button_state_list_animator"

在没有第三方库的情况下,如何在棒棒糖前的版本上模拟标高效果?

你不能用官方方法模拟棒棒糖前的标高

您可以使用一些可绘制图形在组件中生成阴影。例如,谷歌在CardView中使用这种方式

ViewCompat.setElevation(View,int)
当前仅在API21+上创建阴影。如果检查隐藏的代码,此方法将调用:

API 21+:

  @Override
    public void setElevation(View view, float elevation) {
        ViewCompatLollipop.setElevation(view, elevation);
    }
API<21

@Override
public void setElevation(View view, float elevation) {

}

要为棒棒糖制作前的设备添加动态动画阴影,您必须:

  • 将视图的黑色形状绘制为位图
  • 使用标高作为半径模糊该形状。您可以使用RenderScript实现这一点。这并不完全是棒棒糖使用的方法,但它提供了很好的结果,并且很容易添加到现有的视图中
  • 在视图下方绘制模糊的形状。最好的方法可能是
    drawChild
    方法。 您还必须覆盖
    setElevation
    setTranslationZ
    ,覆盖布局中的子视图图形,关闭“剪辑到填充”并实现状态动画
  • 这是一个很大的工作,但它提供了最好的外观,反应动画动态阴影。我不知道您为什么希望在没有第三方库的情况下实现这一点。如果您愿意,您可以分析碳源,并将您希望的部件移植到应用程序中:


    你可以用官方方法模拟棒棒糖前的高度。

    我使用

      android:background="@android:drawable/dialog_holo_light_frame"
    
    我的测试输出:

      @Override
        public void setElevation(View view, float elevation) {
            ViewCompatLollipop.setElevation(view, elevation);
        }
    

    参考-

    感谢用户@Repo

    更新:如果您想更改此可绘图的颜色,请尝试下面的@Irfan答案↓

    创建一幅图像,图像上定义了可拉伸的面片,周围有阴影

    添加此9面片图像作为带有填充的按钮的背景,以便阴影可见


    您可以找到一些预定义的9-patch(.9.png)图像,或者从中选择、自定义并复制到项目的绘图板。

    您可以使用卡片视图进行破解:

    <android.support.v7.widget.CardView
        xmlns:card_view="http://schemas.android.com/apk/res-auto"
        android:id="@+id/btnGetStuff"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        card_view:cardCornerRadius="4dp"
        card_view:cardBackgroundColor="@color/accent"
        >
        <!-- you could also add image view here for icon etc. -->
        <TextView
            android:id="@+id/txtGetStuff"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="@dimen/textSize_small"
            android:textColor="@color/primary_light"
            android:freezesText="true"
            android:text="Get Stuff"
            android:maxWidth="120dp"
            android:singleLine="true"
            android:ellipsize="end"
            android:maxLines="1"
            /></android.support.v7.widget.CardView>
    

    (请参阅wiki文章中的按钮)

    您可以通过声明如下所示的可绘制图形来轻松模拟它-

    shadow.xml

    <?xml version="1.0" encoding="utf-8"?>
    <shape
        xmlns:android="http://schemas.android.com/apk/res/android"
    
        >
    
        <gradient android:type="linear" android:angle="270" android:startColor="#b6b6b6" android:endColor="#ffffff"/>
    
    
    </shape>
    

    添加@Ranjith Kumar-answer

    要将背景色添加到可绘制(示例按钮背景色),我们需要以编程方式获得可绘制

    首先要拿到可拉丝的

    Drawable drawable = getResources().getDrawable(android.R.drawable.dialog_holo_light_frame);
    
    设置颜色

    drawable.setColorFilter(new PorterDuffColorFilter(getResources().getColor(R.color.color_primary), PorterDuff.Mode.MULTIPLY));
    
    然后将其设置为视图

    view.setBackgroundDrawable(drawable);
    

    以防有人搜查

    您可以使用应用程序中的自定义库来执行此操作。您可以在以下链接中找到示例:@RajanBhavsar我可以在没有第三方库的情况下实现吗?是的,请使用此链接来实现。您可以尝试以下操作:从今天起,一天前更新了指向文件行的高程API链接的可能副本。所以,你能提到一些代码吗,所以,开发人员对实际代码有更好的了解。如果我想使用一个蓝色背景的按钮怎么办?如何使用这种方法自定义高程值
     android:background="@drawable/shadow"
    
    Drawable drawable = getResources().getDrawable(android.R.drawable.dialog_holo_light_frame);
    
    drawable.setColorFilter(new PorterDuffColorFilter(getResources().getColor(R.color.color_primary), PorterDuff.Mode.MULTIPLY));
    
    view.setBackgroundDrawable(drawable);