日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android5.0新特性:全新的动画

發布時間:2025/4/16 Android 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android5.0新特性:全新的动画 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

  • Touch feedback 觸摸反饋
  • Circular Reveal 圓形展示
  • Curved motion 曲線運動
  • View state changes 視圖狀態變化
  • Vector Drawables 矢量圖動畫
  • Activity transitions 活動轉場

1. 觸摸反饋

觸摸反饋是指用戶在觸摸控件時的一種可視化交互,在Android L之前,通常是通過press色變來凸顯,但是因為是瞬間變化的效果,不如動畫生動。

在Android L使用了RippleDrawable類,用一個水波紋擴散效果在兩種不同的狀態間過渡。

使用Material Design樣式的應用,button默認帶有該效果。除了默認的效果外,系統還提供了另外兩種效果,我們只把button的背景指定為:

  • ?android:attr/selectableItemBackground` 用于有界Ripple動畫
  • ?android:attr/selectableItemBackgroundBorderless`用于越出視圖邊界的動畫。它會被繪制在最近的且不是全屏的父視圖上

Note:selectableItemBackgroundBorderless 是 API level 21 新加入的屬性

任何view處于可點擊狀態,都可以使用RippleDrawable來達到水波紋特效。

我們也可以通過設置RippleDrawable的顏色屬性來調節動畫顏色,系統默認的顏色為主題的一個屬性顏色:android:colorControlHighlight,所以我們可以通過修改該顏色值來統一修改默認的水波紋顏色。android:colorAccent可以修改checkbox的選中顏色,更多顏色設置請參考主題。

系統的三種觸摸反饋都是通過xml構建的,內容如下:
默認:

<ripplexmlns:android="http://schemas.android.com/apk/res/android"android:color="?android:attr/colorControlHighlight"><item><inset android:insetLeft="4dp"android:insetTop="6dp"android:insetRight="4dp"android:insetBottom="6dp"><shape android:shape="rectangle"><corners android:radius="2dp"/><solid android:color="?android:attr/colorButtonNormal"/><padding android:left="8dp"android:top="4dp"android:right="8dp"android:bottom="4dp"/></shape></inset></item> </ripple>

?android:attr/selectableItemBackground

<ripplexmlns:android="http://schemas.android.com/apk/res/android"android:color="?android:attr/colorControlHighlight"><item android:id="@android:id/mask"><color android:color="@android:color/white"/></item> </ripple>

?android:attr/selectableItemBackgroundBorderless

<ripple xmlns:android="http://schemas.android.com/apk/res/android"android:color="?android:attr/colorControlHighlight"/>

代碼設置

RippleDrawableColorStateList stateList = getResources().getColorStateList(R.color.tint_state_color); RippleDrawable rippleDrawable = new RippleDrawable(stateList,null,null); view.setBackground(rippleDrawable);

2. 圓形展示

我們通常會顯示或者隱藏一個view,在Android L之前,這是一個生硬瞬間變化動作,現在,有了一個新的api為此效果提供一個圓形的顯示或者隱藏的動畫效果。

RevealAnimator和之前的動畫使用沒什么區別,同樣可以設置監聽器和加速器來實現各種各樣的特效,該動畫主要用在隱藏或者顯示一個view,改變view的大小等過渡效果。

通過ViewAnimationUtils.createCircularReveal來創建一個動畫,該api接受5個參數

  • view :操作的視圖
  • centerX: 動畫開始的中心點X
  • centerY :動畫開始的中心點Y
  • startRadius: 動畫開始半徑
  • startRadius :動畫結束半徑

沿著中心的縮小的動畫

Animatoranimator = ViewAnimationUtils.createCircularReveal(view, //操作的視圖view.getWidth() / 2,//動畫開始的中心點Xview.getHeight() / 2,//動畫開始的中心點Yview.getWidth(),//動畫開始半徑0 //動畫結束半徑 ); animator.setInterpolator(newLinearInterpolator()); animator.setDuration(1000); animator.start();

從左上角擴展的圓形動畫

Animatoranimator = ViewAnimationUtils.createCircularReveal(view,0,0,0,(float) Math.hypot(view.getWidth(), view.getHeight())); animator.setDuration(1000); animator.start();

3. 曲線運動

曲線動畫在Android L之前我們可以通過繼承位移動畫重載applyTransformation函數來實現運動軌跡算法,但是操作起來比較繁瑣:

通過繼承位移動畫,來改寫applyTransformation來修改位移的軌跡

public classArcTranslateAnimationextendsAnimation {private float mFromXValue,mToXValue,mFromYValue,mToYValue;private float mFromXDelta,mToXDelta,mFromYDelta,mToYDelta;private PointF mStart,mControl,mEnd;public ArcTranslateAnimation(floatfromXValue, floattoXValue, floatfromYValue, floattoYValue) {mFromXValue = fromXValue;mToXValue = toXValue;mFromYValue = fromYValue;mToYValue = toYValue;}protected void applyTransformation(floatinterpolatedTime,Transformationt) {float dx =calcBezier(interpolatedTime,mStart.x,mControl.x,mEnd.x);float dy =calcBezier(interpolatedTime,mStart.y,mControl.y,mEnd.y);t.getMatrix().setTranslate(dx,dy);}public void initialize(intwidth, intheight, intparentWidth, intparentHeight) {super.initialize(width,height,parentWidth,parentHeight);mFromXDelta = resolveSize(ABSOLUTE,mFromXValue,width,parentWidth);mToXDelta = resolveSize(ABSOLUTE,mToXValue,width, parentWidth);mFromYDelta = resolveSize(ABSOLUTE,mFromYValue,height,parentHeight);mToYDelta = resolveSize(ABSOLUTE,mToYValue,height, parentHeight);mStart =newPointF(mFromXDelta,mFromYDelta);mEnd =newPointF(mToXDelta,mToYDelta);mControl =newPointF(mFromXDelta,mToYDelta);}private long calcBezier(floatinterpolatedTime, floatp0, floatp1, float p2) {return Math.round((Math.pow((1- interpolatedTime),2) * p0)+ (2 * (1-interpolatedTime) * interpolatedTime * p1) +(Math.pow(interpolatedTime,2) * p2);} }

現在我們有了更簡單的實現方式。

ObjectAnimator新增了path方式來構建動畫,并且可以同時對x,y兩個屬性做動畫,我們只用指定一個曲線的path,即可作出曲線的動畫,可以用quadTo/cubicTo繪制貝塞爾曲線,也可以使用arcTo繪制普通的弧線

新增了PathInterpolator動畫插入器,新的基于貝塞爾曲線或路徑對象的插入器。這個插入器指定了一個1x1正方形運動曲線,它使用(0,0)為錨點,(1,1)為控制點,作為構造函數的參數。
視圖狀態變化

Android L在原有的圖片選擇器和顏色選擇器上進行了增強,不僅是控件能根據不同的狀態顯示不同的背景圖片,還能在兩種狀態切換時指定一個動畫,來增加過渡效果,吸引用戶眼球,以突出重點內容。

StateListAnimator類和圖片選擇器,顏色選擇器類似,可以根據view的狀態改變呈現不同的動畫效果,通過xml我們可以構建對應不同狀態的動畫合集,其使用方式也非常簡單,在對應的狀態指定一個屬性動畫即可:

<selectorxmlns:android="http://schemas.android.com/apk/res/android"><item android:state_pressed="true"><set><objectAnimator android:propertyName="translationZ"android:duration="200"android:valueTo="20dp"android:valueType="floatType"/></set></item><item android:state_enabled="true"android:state_pressed="false"><set><objectAnimator android:propertyName="translationZ"android:duration="200"android:valueTo="0"android:valueType="floatType"/></set></item> </selector>

在xml中通過android:stateListAnimator來指定狀態動畫,代碼中可以通過AnimationInflater.loadStateListAnimator()加載動畫,并使用view.setStateListAnimator()將其指定給View。

可以在狀態切換的過程指定多個屬性動畫的合集,繼承了Material主題后,按鈕默認擁有了z屬性動畫。如果想取消這種默認狀態,可以把狀態動畫指定為null。

除了StateListAnimator類指定狀態切換的屬性動畫外,還可以通過AnimatedStateListDrawable來指定狀態切換的幀動畫:

<animated-selectorxmlns:android="http://schemas.android.com/apk/res/android"><item android:id="@+id/pressed"android:drawable="@drawable/btn_check_15"android:state_pressed="true"/><item android:id="@+id/normal" android:drawable="@drawable/btn_check_0"/><transition android:fromId="@+id/normal"android:toId="@+id/pressed"><animation-list><item android:duration="20"android:drawable="@drawable/btn_check_0"/><item android:duration="20"android:drawable="@drawable/btn_check_1"/><item android:duration="20"android:drawable="@drawable/btn_check_2"/></animation-list></transition> </animated-selector>

4. 矢量圖動畫

前面我們學習了矢量圖,AnimatedVectorDrawable類讓你能使一個矢量圖動起來。矢量圖動畫比幀動畫更平滑的展現圖片的變化過程,并且無論在內存占用,還是包體積占用上都要優于幀動畫。通常定義一個矢量圖動畫需要三步:

在drawable資源目錄下定義一個矢量圖

<vectorxmlns:android="http://schemas.android.com/apk/res/android"android:height="64dp"android:width="64dp"android:viewportHeight="600"android:viewportWidth="600"><group android:name="rotationGroup"android:pivotX="300.0"android:pivotY="300.0"android:rotation="45.0"><path android:name="v"android:fillColor="#000000"android:pathData="M300,70 l0,-70 70,70 0,0 -70,70z"/></group> </vector>

在anim下頂一個objectAnimator,并在動畫中修改矢量圖的path

<setxmlns:android="http://schemas.android.com/apk/res/android"><objectAnimator android:duration="3000"android:propertyName="pathData"android:valueFrom="M300,70 l0,-70 70,70 0,0 -70,70z"android:valueTo="M300,70 l0,-70 70,0 0,140 -70,0z"android:valueType="pathType"/> </set>

在drawable下定義一個animated-vector,并把drawable指向矢量圖,把target中的動畫指定為之前定義的objectAnimator

<animated-vectorxmlns:android="http://schemas.android.com/apk/res/android"android:drawable="@drawable/vector_drawable"><target android:name="v"android:animation="@anim/vector_anim"/> </animated-vector>

5. Transition轉場動畫

Android KitKat 4.4.2 (API 19) 開始的 Transitions 功能讓開發者無需學習動畫就可以輕松實現 layout 切換時的動畫效果,為用戶帶來更豐富的體驗。現在 Android Support Library 24.2.0 (新增的 android.support.transition 包)又將這一功能帶到了所有 Android 4.0 ICS(API 14) 及以上系統

在Android L之前,我們可以在startActivity之后調用overridePendingTransition來指定Activity的轉場動畫。現在Android L給我們帶來了更絢麗的轉場動畫。

新的轉場動畫分為兩大類,一種是普通的過渡動畫,另一種是共享元素的過渡動畫。

要想使用新的轉場動畫,可以繼承Material Design主題后在style風格中指定:

<stylename="DefaultTheme"parent="android:Theme.Material"><!-- 允許使用transitions --><item name="android:windowContentTransitions">true</item><!-- 指定進入、退出、返回、重新進入時的transitions --><item name="android:windowEnterTransition">@transition/explode</item><item name="android:windowExitTransition">@transition/explode</item><item name="android:windowReturnTransition">@transition/explode</item><item name="android:windowReenterTransition">@transition/explode</item><!-- 指定進入、退出、返回、重新進入時的共享transitions --><item name="android:windowSharedElementEnterTransition">@transition/change</item><item name="android:windowSharedElementExitTransition">@transition/change</item><item name="android:windowSharedElementReturnTransition">@transition/change</item><item name="android:windowSharedElementReenterTransition">@transition/change</item> </style>

也可以在activity的oncreate方法中進行代碼設置:

// 允許使用transitions getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS); // 指定進入、退出、返回、重新進入時的transitions getWindow().setEnterTransition(new Explode()); getWindow().setExitTransition(new Explode()); getWindow().setReturnTransition(new Explode()); getWindow().setReenterTransition(new Explode()); // 指定進入、退出、返回、重新進入時的共享transitions getWindow().setSharedElementEnterTransition(new ChangeTransform()); getWindow().setSharedElementExitTransition(new ChangeTransform()); getWindow().setSharedElementReturnTransition(new ChangeTransform()); getWindow().setSharedElementReenterTransition(new ChangeTransform());

5.1 普通轉場動畫

所有繼承自visibility類都可以作為進入、退出的過度動畫。如果我們想自定義進入和退出時的動畫效果,只需要繼承Visibility,重載onAppear()和onDisappear()方法來定義進入喝退出的動畫。系統提供了三種默認方式:

Transition說明
Explode爆炸效果,從屏幕中心移入或移出視圖
Slide滑動效果,從屏幕邊緣移入或移出視圖
Fade談入談出效果,改變視圖的透明度

想在xml中指定自定義的進入、退出的過度動畫需要先對動畫進行定義:

<transitionclass="my.app.transition.CustomTransition"/>

注意:其中CustomTransition是你自定義的動畫,它必須繼承自Visibility。

想以普通轉場動畫的方式啟動一個Activity,必須在startActivity函數中傳遞一個ActivityOptions的Bundle對象:

ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(activity); startActivity(intent,options.toBundle());

如果想讓返回也具備轉場效果,那么在返回的Activity中不要再調用finish()函數,而是應該使用finishAfterTransition()來結束一個Activity,該函數會等待動畫執行完畢才結束該Activity

要盡早開始入場切換,可以在被調用的Activity上使用Window.setAllowEnterTransitionOverlap() ,它可以使你擁有更戲劇性的入場切換

5.2 共享轉場動畫

當兩個Activity具備某些相遇的元素時,共享轉場動畫將是一個非常好的選擇。使用轉場動畫需要將相同的元素通過android:transitionName或者view.setTransitionName()設置為相同的名稱,這樣系統才能區分出相同的元素。

共享轉場動畫支持以下共享元素:

Transition說明
ChangeBounds對目標視圖的大小進行動畫
ChangeClipBounds對目標視圖的剪裁大小進行動畫
ChangeTransform對目標視圖進行縮放、旋轉、位移動畫
ChangeImageTransform對目標圖片進行縮放

通過下面的函數啟動一個共享元素動畫:

ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(activity,view, "name"); startActivity(intent,options.toBundle());

如果有多個共享元素,則可以通過Pair進行包裝處理:

ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(activity,Pair.create(view1,"name1"),Pair.create(view2,"name2")); startActivity(intent,.toBundle());

返回時如果需要具備轉場動畫,那么也需要用finish()函數替代finishAfterTransition()來結束一個Activity。

共享轉場動畫通常可以根據指定的元素判斷出合適的轉場動畫效果,不需要我們做額外的處理,也可以通過之前學習的方法進行指定共享元素轉場動畫效果。

5.3 組合轉場動畫

我們可以把多個轉場動畫進行組合,作出更具個性的轉場效果,在資源文件中通過以下方式:

<transitionSetxmlns:android="http://schemas.android.com/apk/res/android"><explode/><transition class="my.app.transition.CustomTransition"/><<changeImageTransform/> </transitionSet>

代碼中我們可以通過TransitionSet類組合多個轉場動畫:

TransitionSet transitionSet = new TransitionSet(); transitionSet.addTransition(new Fade()); transitionSet.addTransition(newChangeBounds());

組合可以同時針對普通轉場動畫和共享元素轉場動畫。

轉場動畫也可以像普通動畫一樣設置持續時間,延期執行時間,速率插入器,以及動畫的監聽等。

轉場動畫通常是對整個布局起作用,如果我們想對某個特定的view實施轉場動畫,可以把該view設置為轉場動畫的target,這樣轉場動畫將只對特定的view起作用。共享元素的動畫的target需要指定為transitionName

總結

以上是生活随笔為你收集整理的Android5.0新特性:全新的动画的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日本精品成人 | 久久久久久成人 | 久久亚洲AV成人无码一二三 | 成长快手短视频在线观看 | 在线视频免费观看一区 | 啪啪网免费 | 午夜国产福利在线 | 国产午夜性春猛交ⅹxxx | www天天操| 国产视频福利在线观看 | 色九月婷婷 | 午夜精品久久久久久久99热浪潮 | 色婷婷视频 | 亚洲成人无码久久 | 亚洲熟妇无码另类久久久 | 国产精品一区二区av白丝下载 | 欧美激情一区二区三级高清视频 | 一区二区在线视频观看 | 懂色av色吟av夜夜嗨 | 69堂精品 | 免费人成在线观看网站 | 黄色大片视频 | 色综合久久综合 | 亚洲欧美另类国产 | 巨乳美女被爆操 | 美女又黄又免费的视频 | 99精品一区二区三区 | 久久夜靖品2区 | 欧美伦理片 | 国产成人免费看一级大黄 | 丝袜脚交国产在线观看 | 成人av综合| av中文字幕一区 | 色哟哟一区| 国产一区二区三区高清 | av黄色网址 | 小辣椒福利视频导航 | 精品国产乱码久久久久久免费 | youjizz欧美 | 美女隐私免费 | 国产亚洲自拍一区 | 亚洲另类春色 | 1000部啪啪未满十八勿入 | 丝袜黄色片 | 91亚瑟视频 | 日韩中文字幕亚洲 | 亚洲国产日韩一区无码精品久久久 | 大学生高潮无套内谢视频 | 黄色精品视频在线观看 | 草草影院最新网址 | 国产一区在线看 | 一区二区免费在线观看视频 | 成人www| 蜜桃视频久久一区免费观看入口 | 久草这里只有精品 | 老子影院午夜精品无码 | 玉蒲团在线 | www.五月婷婷.com | 欧美有码在线观看 | 日韩视频免费播放 | 日韩精品在线观看中文字幕 | 亚洲女人久久久 | 亚洲字幕 | 国产福利合集 | 色哟哟一区二区三区 | 免费毛片一区二区三区久久久 | 久久影音先锋 | 日韩福利电影在线 | 亚洲AV第二区国产精品 | 污片网站| 夜夜精品一区二区无码 | 天堂网成人 | 黄色片免费视频 | 精人妻无码一区二区三区 | 国产中文字幕在线观看 | 天堂免费av | 中文字幕黄色av | 爱吃波客今天最新视频 | jizz在线看 | 午夜三级在线观看 | 人人妻人人澡人人爽久久av | 久久久久久久久亚洲 | 极品销魂美女一区二区三区 | 女同性做受全过程动图 | 欧美性大战久久久久xxx | 欧美黄在线观看 | 天堂√8在线中文 | 日韩男女视频 | 日韩亚洲精品视频 | 久久久夜色精品亚洲 | 免费精品无码AV片在线观看黄 | 精品在线免费观看 | 美梦视频大全在线观看高清 | 午夜精品一区二区三区三上悠亚 | 狠狠夜夜 | 无码人妻精品一区二区三区在线 | 欧美午夜精品 | 精品国产乱码久久久久久图片 | 一本一道波多野结衣一区二区 |