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