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) {
}
要为棒棒糖制作前的设备添加动态动画阴影,您必须:
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);