1. 程式人生 > >Android 5.X 新特性詳解(一)——主題、Palette、陰影、著色和裁剪

Android 5.X 新特性詳解(一)——主題、Palette、陰影、著色和裁剪

Android 5.X 系列開始使用新的設計風格Material Design來統一整個Android系統的介面設計風格。

Material Design 主題

Material Design 現在有三種預設的主題可以設定,程式碼如下:

@android:style/Theme.Material
@android:style/Theme.Material.Light
@android:style/Theme.Material.Light.DarkActionBar

同時,Android 5.X 提出了Color Palette的概念,讓開發者可以自己設定系統區域的顏色,是整個app的顏色風格和系統的顏色風格保持統一。

通過如下所示程式碼,可以通過使用自定義Style的方式來建立自己的Color Palette顏色主題,從而實現不同的顏色風格。

    <!-- Base application theme. -->
    <style name="AppTheme" parent="android:Theme.Material.Light">
        <!-- Customize your theme here. -->

        <!--Main theme colors-->
        <!--your app branding color for the app bar-->
<item name="colorPrimary">@color/colorPrimary</item> <!--darker variant for the status bar and contextual app bars--> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <!--theme UI controls like checkboxes and text fields-->
<item name="navigationBarColor">@color/colorAccent</item> </style>

Palette

Android 5.X 創新的使用Palette來提取顏色,從而讓主題能夠動態適應當前頁面的色調,做到整個app顏色基調和諧統一。

Android內建了幾種提取色調的種類,如下所示:

  • Vibrant(充滿活力的)
  • Vibrant dark(充滿活力的黑)
  • Vibrant light(充滿活力的亮)
  • Muted(柔和的)
  • Muted dark(柔和的的黑)
  • Muted light(柔和的的亮)

使用Palette的API,能夠讓我們從bitmap中獲取對應的色調,修改當前的主題色調。

使用Palette首先需要在Android Studio 中引用相關的依賴,在專案列表中點選F4,然後在Module Setting的Dependencies選項卡中新增com.android.support:palette-v7:24.0.0引用,重新Sync專案即可。可以通過傳遞一個Bitmap物件給Palette,並呼叫它的Palette.generate()靜態方法或者Palette.generateAsync()方法來建立一個Palette。接下來,就可以使用getter方法來檢索相應的色調。

下面的例子演示瞭如何通過載入的圖片的柔和色調來改變狀態列和Actionbar的色調,程式碼如下所示:

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.test);
        // 建立Palette物件
        Palette.generateAsync(bitmap,
                new Palette.PaletteAsyncListener() {
                    @Override
                    public void onGenerated(Palette palette) {
                        // 通過Palette來獲取對應的色調
                        Palette.Swatch vibrant = palette.getDarkVibrantSwatch();
                        // 將顏色設定給相應的元件
                        getActionBar().setBackgroundDrawable(new ColorDrawable(vibrant.getRgb()));
                        Window window = getWindow();
                        window.setStatusBarColor(vibrant.getRgb());
                    }
                });
    }
}

效果圖如下:

這裡寫圖片描述

檢視與陰影

Material Design 的一個很重要的特點就是擬物扁平化。通過展現生活中的材質效果、恰當地使用陰影和光線,配合完美的動畫效果,模擬出一個動感十足又美麗大膽的視覺效果。

以往的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="XXdp"

通過下面的程式碼,演示了不同檢視高度所顯示效果的不同,XML程式碼如下所示:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">


    <TextView
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_margin="10dp"
        android:background="@mipmap/ic_launcher"/>

    <TextView
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_margin="10dp"
        android:elevation="2dp"
        android:background="@mipmap/ic_launcher"/>

    <TextView
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_margin="10dp"
        android:elevation="10dp"
        android:background="@mipmap/ic_launcher"/>

</LinearLayout>

效果圖如下:

這裡寫圖片描述

在程式中,同樣可以使用如下程式碼來動態改變檢視高度。

view.setTranslationZ(XXX);

通常也會使用屬性動畫來為檢視高度改變的時候增加一個動畫效果,程式碼如下所示:

                if (mFlag) {
                    view.animate().translationZ(100);
                    mFlag = false;
                } else {
                    view.animate().translationZ(0);
                    mFlag = true;
                }

Tinting 和 Clipping

Android 5.X 在對影象的操作上增加了更多的新功能,比如Tinting(著色)和Clipping(裁剪)。

Tinting(著色)

Tinting的使用非常簡單,只要在XML中配置好tint和tintMode就可以了。在下面的程式碼中,設定了幾種不同的tint和tintMode來演示Tinting效果,XML程式碼如下:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">


    <ImageView
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_gravity="center"
        android:elevation="5dp"
        android:layout_margin="5dp"
        android:src="@mipmap/ic_launcher" />

    <ImageView
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_gravity="center"
        android:elevation="5dp"
        android:layout_margin="5dp"
        android:src="@mipmap/ic_launcher"
        android:tint="@android:color/holo_blue_bright"/>

    <ImageView
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_gravity="center"
        android:elevation="5dp"
        android:layout_margin="5dp"
        android:src="@mipmap/ic_launcher"
        android:tint="@android:color/holo_blue_bright"
        android:tintMode="add"/>

    <ImageView
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_gravity="center"
        android:elevation="5dp"
        android:layout_margin="5dp"
        android:src="@mipmap/ic_launcher"
        android:tint="@android:color/holo_blue_bright"
        android:tintMode="multiply"/>

</LinearLayout>

效果圖如下:

這裡寫圖片描述

Tint通過修改影象的Alpha遮罩來修改影象的顏色,從而達到重新著色的目的。

Clipping(裁剪)

Clipping可以改變一個檢視的外形,要使用Clipping,首先需要使用ViewOutlineProvider來修改outline,然後再通過setOutlineProvider將outline作用給檢視。

在下面的例子中,將一個正方形的TextView通過Clipping裁剪成一個圓角正方形和一個圓,XML程式碼如下所示:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <TextView
        android:id="@+id/tv_rect"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_gravity="center"
        android:elevation="1dp"
        android:layout_margin="5dp" />

    <ImageView
        android:id="@+id/tv_cicle"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_gravity="center"
        android:elevation="1dp"
        android:layout_margin="5dp" />

</LinearLayout>

程式程式碼如下:

public class ClippingActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_clipping);

        View view1 = findViewById(R.id.tv_rect);
        View view2 = findViewById(R.id.tv_cicle);

        //獲取Outline
        ViewOutlineProvider viewOutlineProvider1 = new ViewOutlineProvider() {

            @Override
            public void getOutline(View view, Outline outline) {
                //修改outline為特定的形狀
                outline.setRoundRect(0, 0, view.getWidth(), view.getHeight(), 30);
            }
        };
        //獲取Outline
        ViewOutlineProvider viewOutlineProvider2 = new ViewOutlineProvider() {

            @Override
            public void getOutline(View view, Outline outline) {
                //修改outline為特定的形狀
                outline.setOval(0, 0, view.getWidth(), view.getHeight());
            }
        };

        //重新設定形狀
        view1.setOutlineProvider(viewOutlineProvider1);
        view2.setOutlineProvider(viewOutlineProvider2);
    }

}

效果圖如下:

這裡寫圖片描述

程式碼地址

相關推薦

Android 5.X 特性——主題Palette陰影著色裁剪

Android 5.X 系列開始使用新的設計風格Material Design來統一整個Android系統的介面設計風格。 Material Design 主題 Material Design 現在有三種預設的主題可以設定,程式碼如下: @andr

Android 5.X 特性——Material Design 動畫效果

Ripple效果 在Android 5.X 中,Material Design 大量使用了Ripple效果,即點選後的波紋效果。可以通過如下程式碼設定波紋的背景。 //有界波紋 android:background="?android:attr/sele

Android群英傳讀書筆記——第十二章:Android 5.X特性

第十二章目錄 12.1 Android5.X UI設計初步  12.1.1 材料的形態模擬 12.1.2 更加真實的動畫 12.1.3 大色塊的使用 12.2 Material Design主題 12.3 Palette 12.4 檢視與陰影 12

JDK8特性

雖然JDK8已經出來了N久,其新特性也在日益改變著我們的編碼習慣和風格。雖然有些新特性用起來很順手,但是總是傻傻分不清到底是哪個版本的。趁今天有時間,我們就來總結一下,JDK8有哪些能提升我們開發效率的新特性: **一、靜態方法的預設方法和靜態方法** 眾所周知,在介面中定義的普通方法都是抽象方法,方法前

CentOS 7.5安裝配置Tomcat

Tomcat是Apache軟體基金會Jakarta專案中的一個核心專案,主要實現了Java EE中的Servlet、JSP規範,同時也提供HTTP服務,是主流的、免費開源的Java Web輕量級應用伺服器。 一、安裝Tomcat: 1、  安裝JDK(下載地址https://www.orac

Android 動畫】View Animation

安卓平臺目前提供了兩大類動畫,在Android 3.0之前,一大類是View Animation,包括Tween animation(補間動畫),Frame animation(幀動畫),在android3.0中又引入了一個新的動畫系統:property ani

Android程式設計之DialogFragment原始碼

DialogFragment是Fragment家族成員之一,如果你把它簡單的理解成Dialog,那就錯了。它的確可以做作dialog顯示,還可以顯示出自己定義的Dialog或者AlertDialog,但它同時也是一個Fragment。 按照官方的話來理解就是,你既可以把它當

DevExpress ASP.NET Bootstrap Controls v18.2功能

訪問 文件管理 dropbox .net ots 二次 pen 工具 web 行業領先的.NET界面控件2018年第二次重大更新——DevExpress v18.2日前正式發布,本站將以連載的形式為大家介紹新版本新功能。本文將介紹了DevExpres

Android EventBus3.x 使用

led AC target 分解 感覺 div activit .org android事 ?(^∇^*) 五一假期在家無事,新項目中用的是RxJava2+EventBus感覺還不錯,趁這閑暇總結下EventBus 一、概要簡述   EventBus

Android 5.X特性之RecyclerView基本解析及無限複用

說到RecyclerView,相信大家都不陌生,它是我們經典級ListView的升級版,升級後的RecyclerView展現了極大的靈活性。同時內部直接封裝了ViewHolder,不用我們自己定義ViewHolder就能實現item的回收和複用功能。當然它肯定不

V-Ray 3.6 for SketchUp 功能

作者 | 活力網Caigle 當大家Vray3.4都沒有捂熱的時候 Chaos Group 官方 默默釋出了最新版渲染器Vray3.6 for SketchUp 與 Trimble 釋出 SketchUp Pro 2018 時間只相差不到一天 看來 Chaos Group 早

CentOS 7.5安裝配置Tomcat

二、Tomcat調優、開機自啟和日誌切割 1、  編譯安裝openssl、apr、apr-util和tomcat-native: (1)編譯安裝openssl(下載地址https://www.openssl.org/source/): # yum -y install openssl-de

Android Paging library

官方文件翻譯 文章目錄 1.概覽 1.1 庫架構 1.2 支援不同的資料架構 1.2.1 網路獲取或者資料庫 1.2.2 網路和資料庫同時獲取 1.2.3 處理網路錯誤 1.2.4 更新

Android Lifecycle

官方文件翻譯 使用生命週期感知元件處理生命週期 Lifecycle Event State LifecycleOwner 實現一個自定義的LifecycleOwner 生命週期感

C# 特性Attribute

今天整理關於特性的資料,之前都忘了,今天整理一下 參考《C#高階程式設計》第10版 0X01 特性(Attribute) 特性定義 特性不會影響編譯過程,因為編譯器不能識別它們,但這些特性在應用於程式元素

Android 4.4 Graphic系統2 VSYNC的生成

VSYNC 的概念 VSYNC(Vertical Synchronization)是一個相當古老的概念,對於遊戲玩家,它有一個更加大名鼎鼎的中文名字—-垂直同步。 “垂直同步(vsync)”指的是顯示卡的輸出幀數和螢幕的垂直重新整理率相同,這完全是一個CRT顯

[Android]ToolBar使用——專案配置

private Toolbar mToolbar; private WebFragment mWebFragment; private long mBeforeTime; @Override protected void onCreate(Bundle savedInst

Mysql事務事務的概念,四大特性,使用回滾

以往的時候在java中,下面一個語句就可以操作一條資料庫語句<span style="font-family: Arial, Helvetica, sans-serif;">Class.forName("com.mysql.jdbc.Driver");//載入相

Android使用GPUImage實現濾鏡效果精煉

一、前期基礎知識詳解 “濾鏡通常用於相機鏡頭作為調色、新增效果之用。如UV鏡、偏振鏡、星光鏡、各種色彩濾光片。濾鏡也是繪圖軟體中用於製造特殊效果的工具統稱,以Photoshop為例,它擁有風格化、畫筆描邊、模糊、扭曲、銳化、視訊、素描、紋理、畫素化、渲染、藝術效果、其他

Android 樣式開發:Drawable分類資源彙總

Drawable Resources 解釋為:可繪製物件資源。是指可在螢幕上繪製的圖形,以及可以使用 getDrawable(int) 等 API 檢索或者應用到具有 android:drawable