Material design非常强调“纸张”这一比喻。为了制作这些,阴影是必不可少的。由于Material design是一种哲学而不是API(尽管它已经内置在L中),因此应该在任何地方(Windows Forms、HTML/CSS等)进行操作。 我如何在Android API 14到20中实现这一点?
请注意,预制的PNG对于圆形和其他非正方形的形状并不实用。
如果您不担心在Lollipop之后的向后兼容性,可以直接在XML中设置elevation属性。
android:elevation="10dp"
否则,您需要使用support.v4.ViewCompat库在Java中进行设置。
ViewCompat.setElevation(myView, 10);
并将此添加到您的build.gradle文件中
compile 'com.android.support:support-v4:21.+'
这只是一个粗略的示例,展示了如何使用IT技术来解决问题。
<?xml version="1.0" encoding="utf-8"?>
<!-- Drop Shadow Stack -->
<item>
<shape android:shape="oval">
<corners android:radius="64dp"/>
<solid android:color="#009A3D"/>
<size
android:width="64dp"
android:height="64dp"/>
<padding
android:top="1dp"
android:right="1dp"
android:bottom="1dp"
android:left="1dp"/>
<solid android:color="#00CCCCCC"/>
</shape>
</item>
<item>
<shape android:shape="oval">
<corners android:radius="64dp"/>
<solid android:color="#009A3D"/>
<size
android:width="64dp"
android:height="64dp"/>
<padding
android:top="1dp"
android:right="1dp"
android:bottom="1dp"
android:left="1dp"/>
<solid android:color="#10CCCCCC"/>
</shape>
</item>
<item>
<shape android:shape="oval">
<corners android:radius="64dp"/>
<solid android:color="#009A3D"/>
<size
android:width="64dp"
android:height="64dp"/>
<padding
android:top="1dp"
android:right="1dp"
android:bottom="1dp"
android:left="1dp"/>
<solid android:color="#20CCCCCC"/>
</shape>
</item>
<item>
<shape android:shape="oval">
<corners android:radius="64dp"/>
<solid android:color="#009A3D"/>
<size
android:width="64dp"
android:height="64dp"/>
<padding
android:top="1dp"
android:right="1dp"
android:bottom="1dp"
android:left="1dp"/>
<solid android:color="#30CCCCCC"/>
</shape>
</item>
<item>
<shape android:shape="oval">
<corners android:radius="64dp"/>
<solid android:color="#009A3D"/>
<size
android:width="64dp"
android:height="64dp"/>
<padding
android:top="1dp"
android:right="1dp"
android:bottom="1dp"
android:left="1dp"/>
<solid android:color="#50CCCCCC"/>
</shape>
</item>
<!-- Background -->
<item>
<shape android:shape="oval">
<corners android:radius="64dp"/>
<solid android:color="#009A3D"/>
<size
android:width="64dp"
android:height="64dp"/>
</shape>
</item>
在您的布局文件中,您可以使用它...
<Button
android:id="@+id/add_btn"
android:text="+"
android:textColor="#FFFDFC"
android:textSize="44sp"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_marginRight="50dp"
android:layout_marginBottom="40dp"
android:layout_width="64dp"
android:layout_height="64dp"
android:clickable="true"
android:enabled="true"
android:singleLine="false"
android:layout_alignParentTop="false"
android:background="@drawable/round_button"/>
您可以使用android.support.v7.widget.CardView。
也许不是完美的解决方案,但对于我来说,在我想要的内容上有效。因此,例如,这是我在我的应用程序上使用的技巧...在矩形形状上,我对结果感到满意。
private View.OnTouchListener touch = new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
final android.support.v7.widget.CardView card_view = (android.support.v7.widget.CardView) ((View) v.getParent()).findViewById(R.id.card_view);
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
card_view.setCardElevation(6);
card_view.setScaleX(1.007f);
card_view.setScaleY(1.007f);
break;
case MotionEvent.ACTION_CANCEL:
case MotionEvent.ACTION_UP:
card_view.setCardElevation(3);
card_view.setScaleX(1f);
card_view.setScaleY(1f);
break;
}
return false;
}
};
。
<android.support.v7.widget.CardView
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:id="@+id/card_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
card_view:cardCornerRadius="2dp"
card_view:cardMaxElevation="6dp"
card_view:cardElevation="3dp">