Android-Android 5.X新特性之视图和阴影

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android-Android 5.X新特性之视图和阴影相关的知识,希望对你有一定的参考价值。

  Material Design的一个很重要的特点就是拟扁平化,通过使用Material Design中的阴影和光线,配合完美的动画效果,模拟出一个动感十足有美丽大胆的视觉效果。

1.阴影效果

  以往的android版本中,View通常只有两个属性--X和Y,而在Android 5.X中,Google为其增加了一个新的属性--Z,对应垂直上方向上的高度变化。在Android 5.X中,View的Z值由两部分构成,elevation和translationZ(它们都是Android 5.X新引入的属性)。elevation是静态的成员,translationZ可以在代码中使用来实现动画效果,它们的关系如下

  Z = elevation + translationZ

  我们通过在XMl布局中使用如下属性来设置View的高度

  android:elevation = ""

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:orientation="vertical">
 6     <TextView
 7         android:elevation="20dp"
 8         android:id="@+id/id_textView"
 9         android:background="#5FF"
10         android:layout_width="300dp"
11         android:layout_height="300dp" />
12 </LinearLayout>

效果如图

技术分享

仔细的看一下图片,会发现TextView背后有一部分阴影。

同样,我们还可在使用Java代码来动态更改TextView的高度。

  view.setTranslationZ();

2.Tinting和Clipping

  Android 5.X 在对图像的操作上有了更多的功能。下面来看看Android 5.X 的两个操作图像的新功能--Tinting(着色)和Clipping(裁剪)。

  (1)Tinting(着色)

  Tint的使用非常的简单,只要在XML代码中配置好Tint和TintMode就可以了。

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:gravity="center"
 6     android:orientation="vertical">
 7     <ImageView
 8         android:src="@mipmap/ic_launcher"
 9         android:layout_width="wrap_content"
10         android:layout_height="wrap_content" />
11     <ImageView
12         android:tint="#5FF"
13         android:src="@mipmap/ic_launcher"
14         android:layout_width="wrap_content"
15         android:layout_height="wrap_content" />
16     <ImageView
17         android:tintMode="add"
18         android:tint="#5FF"
19         android:src="@mipmap/ic_launcher"
20         android:layout_width="wrap_content"
21         android:layout_height="wrap_content" />
22     <ImageView
23         android:tintMode="multiply"
24         android:tint="#5FF"
25         android:src="@mipmap/ic_launcher"
26         android:layout_width="wrap_content"
27         android:layout_height="wrap_content" />
28     <ImageView
29         android:tintMode="screen"
30         android:tint="#5FF"
31         android:src="@mipmap/ic_launcher"
32         android:layout_width="wrap_content"
33         android:layout_height="wrap_content" />
34 
35 </LinearLayout>

效果如图

技术分享

 

  (2)Cliping(裁剪)

  Clipping可以让我们改变一个视图的外形。要使用Clipping,首先需要使用ViewOutlineProvider来修改outline,然后通过setOutlineProvider将outline作用到视图上去

  

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:gravity="center"
 6     android:orientation="vertical">
 7 
 8     <TextView
 9         android:id="@+id/id_textView1"
10         android:elevation="1dp"
11         android:layout_width="200dp"
12         android:layout_height="200dp"
13         />
14 
15     <TextView
16         android:id="@+id/id_textView2"
17         android:elevation="1dp"
18         android:layout_width="200dp"
19         android:layout_height="200dp"
20         android:layout_marginTop="10dp"
21         />
22 </LinearLayout>
 1 public class MainActivity extends AppCompatActivity {
 2     private TextView mTextView1 = null;
 3     private TextView mTextView2 = null;
 4 
 5     @Override
 6     protected void onCreate(@Nullable Bundle savedInstanceState) {
 7         super.onCreate(savedInstanceState);
 8         setContentView(R.layout.activity_main);
 9         mTextView1 = (TextView) findViewById(R.id.id_textView1);
10         mTextView2 = (TextView) findViewById(R.id.id_textView2);
11         ViewOutlineProvider viewOutlineProvider = new ViewOutlineProvider() {
12             @Override
13             public void getOutline(View view, Outline outline) {
14                 //裁剪为圆角矩形
15                 outline.setRoundRect(0, 0, view.getWidth(), view.getHeight(), 30);
16             }
17         };
18         ViewOutlineProvider viewOutlineProvider1 = new ViewOutlineProvider() {
19             @Override
20             public void getOutline(View view, Outline outline) {
21                 //裁剪为圆形
22                 outline.setOval(0, 0, view.getWidth(), view.getHeight());
23             }
24         };
25         mTextView1.setOutlineProvider(viewOutlineProvider);
26         mTextView2.setOutlineProvider(viewOutlineProvider1);
27     }
28 }

效果如图

技术分享

  注意一下,如果使用如上方法不能成功裁剪的话,试着把min api改为21及其以上,这样再尝试一下

以上是关于Android-Android 5.X新特性之视图和阴影的主要内容,如果未能解决你的问题,请参考以下文章

Android-Android进程间通讯之messenger

Android-Android内容提供器之运行时权限

Android-Android内容提供器之访问其他程序的数据

Android 5.X新特性

Solr新特性4.x,5.x,6.x

Android 5.X 新特性详解——列表与卡片