Android群英傳讀書筆記(第十二章)

第十一章介紹的是云端服務(wù)器搭建方面的知識(shí),暫且略過刑桑,本章主要介紹的是Android5.X新特性氯质。
本章介紹了許多Material Design的概念,在此不做記錄。
另外本章記錄了許多新特性里包括了許多動(dòng)畫特效祠斧,大家可以自行谷歌百度查看效果闻察。

1.Palette

Palette用來提取顏色,使用它能從Bitmap中提取色調(diào)琢锋,從而修改當(dāng)前主題的顏色辕漂。
Android內(nèi)置了幾種提取色調(diào)的種類如下:

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

使用Palette需要先在Android studio中添加相關(guān)的依賴:com.android.support:palette-v7:xx.x.x引用∥獬可以通過傳遞一個(gè)Bitmap對(duì)象給Palette钉嘹,書中寫是用它的Palette.generate()靜態(tài)方法或者Palette.generateAsync()方法來創(chuàng)建一個(gè)Palette。然而這兩個(gè)方法已經(jīng)過時(shí)了鲸阻,改用建造者模式來創(chuàng)建對(duì)象了跋涣。

代碼:

 Palette.from(bitmap).generate(new Palette.PaletteAsyncListener() {
            @Override
            public void onGenerated(Palette palette) {
                //通過Palette來獲取對(duì)應(yīng)的色調(diào)
                Palette.Swatch vibrant=palette.getDarkVibrantSwatch();
                //將顏色設(shè)置給相應(yīng)的組件
                btn.setBackgroundColor(vibrant.getRgb());
            }
        });

2.視圖與陰影

Android的View通常具有X和Y兩個(gè)屬性,在5.X中谷歌新增了一個(gè)Z屬性來控制對(duì)應(yīng)垂直方向上的高度變化鸟悴。它由elevationtranslationZ兩部分組成陈辱,elevation是靜態(tài)的成員,translationZ可以在代碼中使用來實(shí)現(xiàn)動(dòng)畫效果细诸。Z=elevation+translationZ沛贪。

  • 在XML中使用elevation來定義Z的高度:android:elevation="XXdp"
  • 在代碼中通過translationZview.setTranslationZ(XXX)或者使用動(dòng)畫view.animate().translationZ(100)

3.Tinting和Clipping

  • Tinting(著色):
    在XML中配置好tine和tintMode就可以實(shí)現(xiàn)對(duì)圖片的著色,它通過修改圖形的Alpha遮罩來修改圖像的顏色震贵,從而達(dá)到重新著色的目的
<ImageView 
      android:layout_width="100dp"
      android:layout_height="100dp"
      android:src="@drawable/icon"
      android:tint="@color/blue"
/>
  • Clipping(裁剪):
    Clipping可以讓我們改變一個(gè)視圖的外形利赋,首先我們需要使用ViewOutlineProvider修改outline然后再通過設(shè)置setOutlineProvider將outline作用給視圖。
    代碼:
//寬高100的textview
ViewOutlineProvider vop=new ViewOutlineProvider(){
      @Override
      public void getOutline(View view,Outline outline){
               //修改outline為特定形狀
               outline.setRoundRect(0,0,textView.getWidth(),textView.getHeight(),30);
      }
};
textView.setOutlineProvider(vop);
//設(shè)置完以后將會(huì)看到一個(gè)圓角的矩形

4.列表和卡片

  • RecyclerView:
    個(gè)人感覺是一個(gè)升級(jí)版的ListView猩系,在其Adapter內(nèi)已經(jīng)封裝好一個(gè)ViewHolder媚送,并且可以通過不同的LayoutManager來直接實(shí)現(xiàn)類似GridView或者是瀑布流的樣式。但是RecyclerView并沒有header蝙眶、footer以及點(diǎn)擊事件季希,這些如果有需求則需要自己來實(shí)現(xiàn)褪那。RecyclerView介紹以及RecyclerView添加header幽纷、footer方案感覺比書中的介紹的要詳細(xì)式塌,在此就不多做記錄!

  • CardView:
    CardView也是一種容器布局友浸,只是它提供了卡片這樣的一種形式峰尝,開發(fā)者可以定義卡片大小與視角高度,并設(shè)置圓角的角度收恢,如果要作為列表來使用最好配合RecyclerView而不是ListView武学,否則一些屬性會(huì)失效。
    CardView通過cardBackgroundColor來設(shè)置背景色伦意,通過cardCornerRadius來設(shè)置圓角角度火窒,這兩個(gè)是自定義的屬性需添加res-auto才能使用。

5.Activity過渡動(dòng)畫

Android5.X提供了三種Transition類型驮肉。

  • 進(jìn)入:一個(gè)進(jìn)入的過渡動(dòng)畫決定Activity中的所有的視圖怎么進(jìn)入屏幕熏矿。
  • 退出:一個(gè)退出的過渡動(dòng)畫決定了一個(gè)Activity中的所有視圖怎么退出屏幕。
  • 共享元素:一個(gè)共享元素過渡動(dòng)畫決定了兩個(gè)Activities之間的過渡离钝,怎么共享它們的視圖票编。

其中進(jìn)入和退出包括:

  • explode(分解):從屏幕中間進(jìn)或者出,移動(dòng)視圖卵渴。
  • slide(滑動(dòng)):從屏幕邊緣進(jìn)或者出慧域,移動(dòng)視圖。
  • fade(淡出):通過改變屏幕上視圖的不透明度達(dá)到添加或者移除視圖浪读。

共享元素包括:

  • changeBounds:改變目標(biāo)視圖的布局邊界
  • changeClipBounds:裁剪目標(biāo)視圖邊界
  • changeTransform:改變目標(biāo)視圖的縮放比例和旋轉(zhuǎn)角度
  • changeImageTransform:改變目標(biāo)圖片的大小和縮放比例

進(jìn)入和退出的代碼:

//ActivityA中:
startActivity(intent,ActivityOptions.makeSceneTransitionAnimation(this).toBundle());
//ActivityB中:
getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);
//進(jìn)入B的動(dòng)畫
getWindow().setEnterTransition(new Explode());
//退出B的動(dòng)畫
getWindow().setExitTransition(new Explode());

其實(shí)這和以前的overridePendingtransition()差不多昔榴,并且這個(gè)方法并不兼容5.0以下。

共享元素代碼:
首先需要在ActivityA中的布局文件中設(shè)置共享元素碘橘,給它增加相應(yīng)的屬性:

android:transitionName="XXX"

同時(shí)在Activity2中藥實(shí)現(xiàn)共享效果的元素也增加相同的屬性论泛,代碼同上,并且保證命名相同蛹屿。
如果只要一個(gè)共享元素屁奏,那么Activity1中只需要使用如下代碼:

//使用的代碼就是在前面普通動(dòng)畫的基礎(chǔ)上增加了共享的View和前面取的名字。
startActivity(intent,ActivityOptions.makeSceneTransitionAnimation(this,view,"share").toBundle());

如果有多個(gè)元素需要共享错负,那么可以通過Pair.create()來創(chuàng)建多個(gè)共享元素:

startActivity(intent,ActivityOptions.makeSceneTransitionAnimation(this,Pair.create(view,"share"),Pair.create(fab,"fab")).toBundle());

6.Ripple效果

Ripple即點(diǎn)擊后的波紋效果坟瓢。可以通過如下代碼進(jìn)行設(shè)置:

//波紋有邊界
android:background="?android:attr/selectableItemBackground"
//波紋超出邊界
android:background="?android:attr/selectableItemBackgroundBorderless"

7.Circular Reveal

這個(gè)動(dòng)畫效果在谷歌IO大會(huì)的演示視頻中出現(xiàn)了很多次犹撒,具體表現(xiàn)為一個(gè)View以圓形的形式展開折联、揭示出來。通過ViewAnimationUtils.createCircularReveal()方法可以創(chuàng)建一個(gè)Reveal動(dòng)畫识颊,其中需傳入幾個(gè)參數(shù):

  • centerX 動(dòng)畫開始的中心點(diǎn)X
  • centerY 動(dòng)畫開始的中心點(diǎn)Y
  • startRadius 動(dòng)畫開始半徑
  • endRadius 動(dòng)畫結(jié)束半徑

8.Toolbar

Toolbar與Actionbar最大的區(qū)別就是它更加自由可控诚镰。要使用Toolbar必須引入支持appcompat-v7奕坟,并設(shè)置主題為NoActionBar。其菜單的配置與Actionbar基本類似清笨,通過setSupportActionBar(toolbar)方法可以用Toolbar模擬出Actionbar的效果月杉。

9.Notification

在Android5.X上谷歌改進(jìn)了通知欄,優(yōu)化了Notification抠艾,長(zhǎng)按Notification時(shí)會(huì)顯示出消息來源苛萎。Notification會(huì)有一個(gè)從白色到灰色的動(dòng)畫切換效果,最終顯示發(fā)出這個(gè)Notification的調(diào)用者检号,同時(shí)在鎖屏狀態(tài)下我們也可以看見Notification通知了腌歉。

  • 基本的Notification
    通過Notification.Builder創(chuàng)建一個(gè)Notification的builder:
Notification.Builder builder=new Notification.Builder(this);

接下來需要提供一個(gè)延遲的Intent即PendingIntent:

//點(diǎn)擊Notification之后就會(huì)觸發(fā)PendingIntent事件,打開瀏覽器開始瀏覽網(wǎng)頁(yè)齐苛。
Intent intent=new Intent(Intent.ACTION_VIEW,Uri.parse("http://www.sina.com"));
PendingIntent pendingIntent=PendingIntent.getActivity(this,0,intent,0);

Notification還可以添加各種屬性:

builder.setSmallIcon(R.drawable.ic_launcher);
builder.setContentIntent(pendingIntent);
builder.setAutoCancel(true);
builder.setContentTitle("test");
.....

Android系統(tǒng)通過NotificationManager系統(tǒng)服務(wù)來幫助我們管理Notification:

//調(diào)用notify方法時(shí)需傳入一個(gè)ID翘盖,用來區(qū)分不同的App的Notificaiton。
NotificationManager nM=(NotificationManager) getSystemService(NOTIFICATION_SERVICE);
nM.notify(NOTIFICATION_ID_BASIC),builder.build());
  • 折疊式Notification
    折疊式Notification也是一種自定義視圖的Notification凹蜂,常用于顯示長(zhǎng)文本馍驯。它擁有兩個(gè)視圖,一個(gè)是普通狀態(tài)下的視圖狀態(tài)炊甲,另一個(gè)是展開狀態(tài)下的視圖狀態(tài)泥彤。需要RemoteViews來幫助創(chuàng)建一個(gè)自定義Notification。
//正常狀態(tài)視圖
notification.contentView=contentView;
//展開狀態(tài)視圖
notificaiton.bigContentView=expandedView;
  • 懸掛式Notification
    懸掛式Notification是Android5.0新增加的方式卿啡,可以在屏幕上方產(chǎn)生Notification切不會(huì)打斷用戶從操作吟吝,主要通過setFullScreenIntent,可以很輕松地將一個(gè)Notification變成一個(gè)懸掛式Notification颈娜。

  • 顯示等級(jí)的Notification
    分為3個(gè)等級(jí):

    • VISIBILITY_PRIVATE:表明只有當(dāng)沒有鎖屏的時(shí)候會(huì)顯示剑逃。
    • VISIBILITY_PUBLIC:表明在任何情況下都會(huì)顯示。
    • VISIBILITY_SECRET:表明在pin官辽、password等安全鎖和沒有鎖屏的情況下才能夠顯示蛹磺。

代碼中具體通過builder的setVisibility()

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市同仆,隨后出現(xiàn)的幾起案子萤捆,更是在濱河造成了極大的恐慌,老刑警劉巖俗批,帶你破解...
    沈念sama閱讀 211,376評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件俗或,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡岁忘,警方通過查閱死者的電腦和手機(jī)辛慰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來干像,“玉大人帅腌,你說我怎么就攤上這事驰弄。” “怎么了速客?”我有些...
    開封第一講書人閱讀 156,966評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵戚篙,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我挽封,道長(zhǎng)已球,這世上最難降的妖魔是什么臣镣? 我笑而不...
    開封第一講書人閱讀 56,432評(píng)論 1 283
  • 正文 為了忘掉前任辅愿,我火速辦了婚禮,結(jié)果婚禮上忆某,老公的妹妹穿的比我還像新娘点待。我一直安慰自己无牵,他們只是感情好忙干,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,519評(píng)論 6 385
  • 文/花漫 我一把揭開白布橘券。 她就那樣靜靜地躺著非春,像睡著了一般嘱吗。 火紅的嫁衣襯著肌膚如雪梨睁。 梳的紋絲不亂的頭發(fā)上济瓢,一...
    開封第一講書人閱讀 49,792評(píng)論 1 290
  • 那天帚戳,我揣著相機(jī)與錄音削锰,去河邊找鬼通铲。 笑死,一個(gè)胖子當(dāng)著我的面吹牛器贩,可吹牛的內(nèi)容都是我干的颅夺。 我是一名探鬼主播,決...
    沈念sama閱讀 38,933評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼蛹稍,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼吧黄!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起唆姐,我...
    開封第一講書人閱讀 37,701評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤拗慨,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后奉芦,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體赵抢,經(jīng)...
    沈念sama閱讀 44,143評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,488評(píng)論 2 327
  • 正文 我和宋清朗相戀三年仗阅,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了昌讲。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,626評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡减噪,死狀恐怖短绸,靈堂內(nèi)的尸體忽然破棺而出车吹,到底是詐尸還是另有隱情,我是刑警寧澤醋闭,帶...
    沈念sama閱讀 34,292評(píng)論 4 329
  • 正文 年R本政府宣布窄驹,位于F島的核電站,受9級(jí)特大地震影響证逻,放射性物質(zhì)發(fā)生泄漏乐埠。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,896評(píng)論 3 313
  • 文/蒙蒙 一囚企、第九天 我趴在偏房一處隱蔽的房頂上張望丈咐。 院中可真熱鬧,春花似錦龙宏、人聲如沸棵逊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)辆影。三九已至,卻和暖如春黍特,著一層夾襖步出監(jiān)牢的瞬間蛙讥,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來泰國(guó)打工灭衷, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留次慢,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,324評(píng)論 2 360
  • 正文 我出身青樓今布,卻偏偏與公主長(zhǎng)得像经备,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子部默,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,494評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容