溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Android 5.0新特性

發(fā)布時(shí)間:2020-06-19 04:26:11 來源:網(wǎng)絡(luò) 閱讀:4649 作者:tlw90 欄目:移動(dòng)開發(fā)

1.   Android5.0新特性

  系統(tǒng)主題,如何自定義主題  高度與陰影  陰影與輪廓  輪廓與裁剪  矢量圖  drawable染色  取色器  漣漪動(dòng)畫  xml漣漪動(dòng)畫  代碼漣漪動(dòng)畫  狀態(tài)動(dòng)畫  矢量圖動(dòng)畫  路徑動(dòng)畫  揭示動(dòng)畫  Activity轉(zhuǎn)場動(dòng)畫  共享元素轉(zhuǎn)場動(dòng)畫  xml配置轉(zhuǎn)場動(dòng)畫  CardView  如何兼容低版本

1.1.Material DesignMD)簡介

Material Design材料設(shè)計(jì),是的一種新的設(shè)計(jì)風(fēng)格,谷歌希望寄由此來統(tǒng)一各種平臺(tái)上的應(yīng)用外觀和用戶體驗(yàn)。

 

官網(wǎng)介紹:

http://www.google.com/design/spec/material-design/introduction.html

 

1.2.主題樣式

l  系統(tǒng)自帶的三個(gè)材料風(fēng)格主題:

@android:style/Theme.Material (深色)

@android:style/Theme.Material.Light (亮色)

@android:style/Theme.Material.Light.DarkActionBar(亮色,actionbar為深色)

 

l  如何使用材料風(fēng)格主題?

官方資料:http://developer.android.com/training/material/theme.html

           file:///D:/Android/android-sdk-windows/docs/training/material/theme.html

顏色取色器:

           http://www.materialpalette.com/

 

(1)定義主題:

<!--  api21以上版本生效 -->

<style name="RedTheme"  parent="android:Theme.Material">
    
<!-- 狀態(tài)欄顏色,會(huì)被statusBarColor效果覆蓋-->
    
<item name="android:colorPrimaryDark">@color/status_red</item>
    
<!-- 狀態(tài)欄顏色,繼承自colorPrimaryDark  -->
    
<item name="android:statusBarColor">@color/status_red</item>
    
<!--  actionBar顏色 -->
    
<item name="android:colorPrimary">@color/action_red</item>
    
<!-- 窗口背景顏色 -->
    
<item name="android:windowBackground">@color/window_bg_red</item>
    
<!-- 底部導(dǎo)航欄顏色 -->
    
<item name="android:navigationBarColor">@color/navigation_red</item>
 
    
<!-- 前景色:ListView的分割線顏色,switch滑動(dòng)區(qū)域色-->
    
<item name="android:colorForeground">@color/fg_red</item>
    
<!-- 背景色:popMenu的背景色  -->
    
<item name="android:colorBackground">@color/bg_red</item>
 
    
<!-- 控件默認(rèn)顏色 ,效果會(huì)被colorControlActivated取代  -->
    
<item name="android:colorAccent">@color/control_activated_red</item>
    
<!-- 控件默認(rèn)狀態(tài)時(shí)的顏色  -->
    
<item name="android:colorControlNormal">@color/control_normal_red</item>
    
<!-- 控件按下時(shí)的顏色,會(huì)影響水波紋效果,繼承自colorAccent  -->
    
<item name="android:colorControlHighlight">@color/control_highlight_red</item>
    
<!-- 控件選中時(shí)(selectedchecked)的顏色 -->
    
<item name="android:colorControlActivated">@color/control_activated_red</item>
 
    
<!--  Button的默認(rèn)背景顏色 -->
    
<item name="android:colorButtonNormal">@color/button_normal_red</item>
    
<!--  Button,textView的文字顏色  -->
    
<item name="android:textColor">@color/white_text</item>
    
<!--  RadioButton checkbox等控件的文字 -->
    
<item name="android:textColorPrimaryDisableOnly">@color/white_text</item>
    
<!--  actionBar的標(biāo)題文字顏色 -->
    
<item name="android:textColorPrimary">@color/white_text</item>
 </
style>

 

(2)使用主題:(有兩種方式)

    a) 配置文件中配置

<application
    
android:theme="@style/RedTheme">

 

    b) 代碼方式:

protected void onCreate(Bundle  savedInstanceState) {
     setTheme(R.style.
RedTheme);   // 設(shè)置主題
    
super.onCreate(savedInstanceState);
     setContentView(R.layout.
activity_main);
 }

 

l  通過V7(部分)包兼容低版本

(1)添加support v7

     build.gradledependencies節(jié)點(diǎn)下添加:

compile 'com.android.support:appcompat-v7:23.0.3'

 

(2)使用Theme.AppCompat主題

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">

 

(3)繼承AppCompatActivity

 界面不再繼承 Activity, FragmentActivity ActionBarActivity, 而是繼承AppCompatActivity, 目的是為了將MD的風(fēng)格,

 Toolbar等新的特效兼容到低版本。

 

注意V7包只是兼容了材料主題的部分功能,一些主題樣式目前在低版本還無法使用

     如:導(dǎo)航欄樣式修改;

1.3.高度與陰影

n  陰影大小Z = elevation + translationZ  elevation是相對(duì)于父控件的高度)

n  比父控件的高寬小,才能顯示陰影

n  高度(陰影大?。Q定了View的遮蓋關(guān)系

 

陰影效果設(shè)置:

android:elevation="4dp"    

android:translationZ="4dp"

 

1.4.輪廓(outlineProvider屬性)

n 指定控件的輪廓

// 默認(rèn)為background

android:outlineProvider="none|background|bounds|paddedBounds"

 

n  若控件背景為半透明的shape或圖片,則不會(huì)產(chǎn)生陰影。需要在代碼中設(shè)置。

// 代碼設(shè)置輪廓
 
circle1.setOutlineProvider(new ViewOutlineProvider()  {
    
public void getOutline(View view, Outline outline)  {
        
// 可以指定圓形,矩形,圓角矩形,path
        
outline.setOval(0, 0,  view.getWidth(), view.getHeight());
     }
 });
 
 
// 代碼設(shè)置輪廓:減少輪廓
 
circle2.setOutlineProvider(new ViewOutlineProvider()  {
    
public void getOutline(View view, Outline outline)  {
         
int padding = dp2px(5);
         outline.setOval(padding,  padding,
                 view.getWidth() -  padding,
                 view.getHeight() -  padding);
     }
 });

 

1.5.裁剪

n  裁剪視圖可以輕松改變視圖形狀;

n  裁剪方法:

通過mView.clipToOutline(true)android:clipToOutline="true"

將視圖裁剪成輪廓指定形狀

n  不是所有輪廓都可裁剪:

僅有矩形、圓形和圓角矩形輪廓支持裁剪,Path、橢圓無法進(jìn)行裁剪;

可通過Outline.canClip()判斷指定的輪廓是否可裁剪:

 

mTextView.setOutlineProvider(new ViewOutlineProvider()  {
    
public void getOutline(View view, Outline outline)  {

// 指定輪廓:圓形
    
outline.setOval(0, 0,  view.getWidth(), view.getHeight());

        // 指定輪廓:圓角矩形
        
// outline.setRoundRect(0, 0,  view.getWidth(), view.getHeight(), dp2px(10));

         cut2.setText("判斷是否可裁剪: "  + outline.canClip());
     }

 
});
 
mTextView.setClipToOutline(true); // 裁剪

1.6.染色(Tint

n  十六種PorterDuffXfermode(參考ApiDemographics / xfermodes

 從上面我們可以看到PorterDuff.Mode為枚舉類,一共有16個(gè)枚舉值:

1.PorterDuff.Mode.CLEAR  

  所繪制不會(huì)提交到畫布上。
2.PorterDuff.Mode.SRC

   顯示上層繪制圖片
3.PorterDuff.Mode.DST

  顯示下層繪制圖片
4.PorterDuff.Mode.SRC_OVER

  正常繪制顯示,上下層繪制疊蓋。
5.PorterDuff.Mode.DST_OVER

  上下層都顯示。下層居上顯示。
6.PorterDuff.Mode.SRC_IN

   取兩層繪制交集。顯示上層。
7.PorterDuff.Mode.DST_IN

  取兩層繪制交集。顯示下層。
8.PorterDuff.Mode.SRC_OUT

 取上層繪制非交集部分。
9.PorterDuff.Mode.DST_OUT

 取下層繪制非交集部分。
10.PorterDuff.Mode.SRC_ATOP

 取下層非交集部分與上層交集部分
11.PorterDuff.Mode.DST_ATOP

 取上層非交集部分與下層交集部分
12.PorterDuff.Mode.XOR

  異或:去除兩圖層交集部分
13.PorterDuff.Mode.DARKEN

  取兩圖層全部區(qū)域,交集部分顏色加深
14.PorterDuff.Mode.LIGHTEN

  取兩圖層全部,點(diǎn)亮交集部分顏色
15.PorterDuff.Mode.MULTIPLY

  取兩圖層交集部分疊加后顏色
16.PorterDuff.Mode.SCREEN

  取兩圖層全部區(qū)域,交集部分變?yōu)橥该魃?/span>

  

n  tint模式

android:background="@drawable/ring"
android:backgroundTint="@color/color_tint"       //tint顏色
android:backgroundTintMode="add"                   // 染色模式

 

n  一張圖片實(shí)現(xiàn)選擇器:

按下的樣式:drawable/ring_tint.xml

<?xml  version="1.0"  encoding="utf-8"?>
 
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
    
android:src="@drawable/ring"
    
android:tint="#5677fc"
    
android:tintMode="multiply" />

 

選擇器的定義:

<?xml  version="1.0"  encoding="utf-8"?>
 
<selector xmlns:android="http://schemas.android.com/apk/res/android">
     <
item android:drawable="@drawable/ring_tint" android:state_pressed="true" />
     <
item android:drawable="@drawable/ring" />
 
</selector>

 

1.7.調(diào)色板(Palette)

Palette:調(diào)色板,取色板,它是v7包中的類: android.support.v7.graphics.Palette

可以用來獲取一張圖片中的顏色值。

 

Vibrant         鮮艷的

Vibrant dark    鮮艷的暗色

Vibrant light    鮮艷的亮色

Muted          柔和的

Muted dark     柔和的暗色

Muted light     柔和的亮色

 

Bitmap bitmap  = BitmapFactory.decodeResource(getResources(),  R.drawable.palette);
 
 

// 對(duì)圖片取色是一個(gè)比較消耗性能的操作,其內(nèi)部會(huì)在子線程中運(yùn)行。
 
Palette.from(bitmap).generate(new Palette.PaletteAsyncListener()  {
   
public void onGenerated(Palette palette) {
      
v.setBackgroundColor(palette.getVibrantColor(Color.BLACK));
      
vd.setBackgroundColor(palette.getDarkVibrantColor(Color.BLACK));
      
vl.setBackgroundColor(palette.getLightVibrantColor(Color.BLACK));
      
m.setBackgroundColor(palette.getMutedColor(Color.BLACK));
      
md.setBackgroundColor(palette.getDarkMutedColor(Color.BLACK));
      
ml.setBackgroundColor(palette.getLightMutedColor(Color.BLACK));
    }
 });

 

1.8.矢量圖

l  SVG 矢量圖可以用一個(gè)根節(jié)點(diǎn)為svgxml文件表示;   

l  w3矢量圖文檔https://www.w3.org/TR/SVG11/paths.html

 

l  繪制矢量圖:  http://editor.method.ac/

l  Svg --> vectorhttp://inloop.github.io/svg2android/

要在android中顯示矢量圖,需要把svg文件轉(zhuǎn)換為vector文件

 

Android 5.0新特性

<LinearLayout
    
android:layout_width="match_parent"
    
android:layout_height="wrap_content"
    
android:gravity="center"
    
android:orientation="horizontal">
     <
ImageView
        
android:layout_width="50dp"
        
android:layout_height="50dp"
        
android:background="@drawable/heart" />
     <
ImageView
        
android:layout_width="200dp"
        
android:layout_height="200dp"
        
android:background="@drawable/heart" />
 </
LinearLayout>

 

// drawable/heart.xml

<?xml version="1.0" encoding="utf-8"?>
 
<vector xmlns:android="http://schemas.android.com/apk/res/android"
    
android:width="100dp"
    
android:height="100dp"
    
android:viewportHeight="40"
    
android:viewportWidth="40">
     <
path
        
android:fillColor="#ff00ff"
        
android:pathData="M20.5,9.5
                          c-1.955,0,-3.83,1.268,-4.5,3
                          c-0.67,-1.732,-2.547,-3,-4.5,-3
                          C8.957,9.5,7,11.432,7,14
                         c0,3.53,3.793,6.257,9,11.5
                          c5.207,-5.242,9,-7.97,9,-11.5
                          C25,11.432,23.043,9.5,20.5,9.5z"
/>
 </
vector>

 

1.9.全新動(dòng)畫

MaterialDesign設(shè)計(jì)中,為用戶與app交互反饋他們的動(dòng)作行為和提供了視覺上的連貫性。Material主題為控件和Activity的過渡提供了一些默認(rèn)的動(dòng)畫,在android L上,允許自定義這些動(dòng)畫:

 

Touch feedback 觸摸反饋動(dòng)畫 (水波紋動(dòng)畫,漣漪動(dòng)畫)

Circular Revealanimation  圓形揭示動(dòng)畫

Path-based animations 基于路徑的動(dòng)畫(Curvedmotion曲線運(yùn)動(dòng))

View state changes 視圖狀態(tài)動(dòng)畫

Vector Drawables 矢量圖動(dòng)畫

Activity transitionsActivity轉(zhuǎn)場動(dòng)畫

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI