1. 程式人生 > >Android Material Design設計基礎

Android Material Design設計基礎

                     

文章簡介

本文主要記錄一些用於MD設計的小控制元件或新概念等,輔助MD設計。

Palette

調色盤,可以根據Bitmap獲取多種色調用於調整ActionBar和StatusBar等,使介面更加和諧。

使用前請自行引入依賴:

compile 'com.android.support:palette-v7:23.3.0'
  • 1

獲取色調的方式: 同步方式:

// Synchronous Palette p = Palette.from(bitmap).generate();
  • 1
  • 2

非同步方式:

// Asynchronous Palette.from(bitmap).generate(new PaletteAsyncListener() {     public
void onGenerated(Palette p) {         // Use generated instance     } });
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

色調型別:

  • Vibrant:充滿活力的
  • Vibrant Dark:充滿活力的黑
  • VibrantLight:充滿活力的亮
  • Muted:柔和的
  • Muted dark:柔和的黑
  • Muted light:柔和的亮

    上述色調的獲取都對應有get方法

CardView

卡片式佈局,簡潔美觀,在5.0後中官方直接提供了自己的卡片式控制元件。 使用前請自行引入依賴:

compile 'com.android.support:cardview-v7:23.3.0'
  • 1

在佈局檔案中,記得新增自定義名稱空間:

xmlns:card_view="http://schemas.android.com/apk/res-auto"
  • 1

兩個主要屬性:

  • card_view:cardBackgroundColor=”@color/colorAccent”
  • card_view:cardCornerRadius=”30dp”

檢視高度

View的大小位置都是通過x,y確定的,而現在有了z軸的概念,這個z值就是View的高度(elevation),高度決定了陰影(shadow)的大小。

View的z值由兩部分組成,elevation和translationZ(它們都是Android L新引入的屬性)。

eleavation是靜態的成員,translationZ是用來做動畫。

Z = elevation+translationZ

前面概念和控制元件的使用Demo: 這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

限於篇幅,直接提供原始碼連結,有愛自取:CardViewDemo

Tinting

著色: Tint通過修改影象的Alpha遮罩來達到重新著色的目的。通過tint和tintMode可以很方便的對影象進行一些處理。

Demo: 這裡寫圖片描述

so,很 easy的實現了色調的變換。

xml:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="horizontal"    tools:context="com.example.horizon.myapplication.MainActivity">    <LinearLayout        android:layout_width="0dp"        android:layout_weight="1"        android:orientation="vertical"        android:gravity="center_horizontal"        android:layout_height="match_parent">        <ImageView            android:id="@+id/image1"            android:layout_marginTop="50dp"            android:layout_width="120dp"            android:layout_height="80dp"            android:src="@drawable/horizon"            android:adjustViewBounds="true"            android:scaleType="centerCrop"/>        <ImageView            android:id="@+id/image2"            android:layout_marginTop="50dp"            android:layout_width="120dp"            android:layout_height="80dp"            android:src="@drawable/horizon"            android:adjustViewBounds="true"            android:scaleType="centerCrop"            android:tint="@color/colorSeaBlue"            android:tintMode="add" />    </LinearLayout>    <LinearLayout        android:layout_width="0dp"        android:layout_weight="1"        android:orientation="vertical"        android:gravity="center_horizontal"        android:layout_height="match_parent">        <ImageView            android:id="@+id/image3"            android:layout_marginTop="50dp"            android:layout_width="120dp"            android:layout_height="80dp"            android:src="@drawable/horizon"            android:adjustViewBounds="true"            android:scaleType="centerCrop"            android:tint="@color/colorSeaBlue"            android:tintMode="screen"/>        <ImageView            android:id="@+id/image4"            android:layout_marginTop="50dp"            android:layout_width="120dp"            android:layout_height="80dp"            android:src="@drawable/horizon"            android:adjustViewBounds="true"            android:scaleType="centerCrop"            android:tint="@color/colorSeaBlue"            android:tintMode="multiply"/>    </LinearLayout></LinearLayout>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67

java

public class MainActivity extends AppCompatActivity {    @TargetApi(Build.VERSION_CODES.LOLLIPOP)    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        ImageView imageView1 = (ImageView) findViewById(R.id.image1);        ImageView imageView2 = (ImageView) findViewById(R.id.image2);        ImageView imageView3 = (ImageView) findViewById(R.id.image3);        ImageView imageView4 = (ImageView) findViewById(R.id.image4);        ViewOutlineProvider imageProvider;        imageProvider = new ViewOutlineProvider() {            @Override            public void getOutline(View view, Outline outline) {                view.setClipToOutline(true);                outline.setRoundRect(0, 0, view.getWidth(), view.getHeight(), 25);            }        };        if (imageView1 != null) {            imageView1.setOutlineProvider(imageProvider);        }        if (imageView2 != null) {            imageView2.setOutlineProvider(imageProvider);        }        if (imageView3 != null) {            imageView3.setOutlineProvider(imageProvider);        }        if (imageView4 != null) {            imageView4.setOutlineProvider(imageProvider);        }    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38

Clipping

為了裁剪一個可繪製的檢視形狀,需要例項OutlineProvider,並在getOutline()呼叫view.setClipToOutline(true)以及設定裁剪的圖形。

Demo:

這裡寫圖片描述

XML:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical"    android:gravity="center"    tools:context="com.example.horizon.myapplication.MainActivity">    <TextView        android:id="@+id/textView"        android:gravity="center"        android:background="@color/colorPrimary"        android:layout_width="120dp"        android:layout_height="120dp"        android:text="Hello World!"        android:elevation="20dp"/>    <ImageView        android:id="@+id/image"        android:layout_marginTop="50dp"        android:layout_width="120dp"        android:layout_height="80dp"        android:src="@drawable/horizon"        android:adjustViewBounds="true"        android:scaleType="centerCrop"/></LinearLayout>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

java:

public class MainActivity extends AppCompatActivity {    @TargetApi(Build.VERSION_CODES.LOLLIPOP)    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        TextView textView = (TextView) findViewById(R.id.textView);        ImageView imageView = (ImageView) findViewById(R.id.image);        final ViewOutlineProvider textProvider;        //例項化ViewOutlineProvider        textProvider = new ViewOutlineProvider() {            @Override            public void getOutline(View view, Outline outline) {                //設定View可裁減和形狀                view.setClipToOutline(true);                outline.setOval(0, 0, view.getWidth(), view.getHeight());            }        };        if (textView != null) {            //為view設定provider            textView.setOutlineProvider(textProvider);        }        ViewOutlineProvider imageProvider;        imageProvider = new ViewOutlineProvider() {            @Override            public void getOutline(View view, Outline outline) {                view.setClipToOutline(true);                outline.setRoundRect(0, 0, view.getWidth(), view.getHeight(), 25);            }        };        if (imageView != null) {            imageView.setOutlineProvider(imageProvider);        }    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45

OK,先到這裡吧。如果本文對你有幫助,歡迎star或點贊支援,不勝感激。