Fragment 實現動畫效果

2021-06-22 12:22:05 字數 2973 閱讀 1712

利用fragment transaction進行切換,很方便提供切換的效果。

在pro android學習筆記(三九):fragment(4):基礎小例子-續的「step 4:實現showdetail(int index),如何管理fragment」中,介紹了如何在容器framelayout中通過fragment管理器,利用fragment transaction實現fragment切換的實現。

通過settransition()我們可以設定有限幾個切換效果,**如下:

protected void addfragmenttostack(int index)

**設定的fade(漸變)效果。

通過objectanimator自定義動態效果

在res/animator中設定兩個動態效果,slide_in_left.xml如下。

<?xml version="1.0" encoding="utf-8"?>

<objectanimatorxmlns:android=""

android:interpolator="@android:interpolator/accelerate_decelerate" 

android:valuefrom="-1280" 

android:valueto="0" 

android:valuetype="floattype" 

android:propertyname="x" 

android:duration="2000"  />

實現自定義動畫的類是objectanimator,不僅用於fragment,也可用於view。在xml中,定義了從「from」狀態到「to」狀態,時間間隔為duration(毫秒),所執行的變化規則稱為interpolator。最簡單的interpolator是linear,即@android:interpolator/linear,從狀態from到to狀態是均勻變化。預設的interpolator是accelerate_decelerate,如本例,在狀態變化中先是加速,後是減速,使使用者視覺上平滑過渡。此外還有@android:interpolator/bounce為彈跳方式。系統提供的方式可以在源**/data/res/interpolator中檢視。android:propertyname用於動畫的維度,在本例中x表示橫向,根view的setx()中的引數是float,所以設定valuetype為floattype。我們設定可以設定自己的維度。from設定為-1280,因為這個值對於終端裝置而言,-1280個畫素位可以確保從不可視的位置移入。如果我們沒有設定from,系統會根據當前值來設定初始值。

另乙個動態效果檔案slide_out_right.xml如下:

<?xml version="1.0" encoding="utf-8"?>

xmlns:android=""

android:interpolator="@android:interpolator/accelerate_decelerate" 

android:valuefrom="0" 

android:valueto="1280" 

android:valuetype="floattype" 

android:propertyname="x" 

android:duration="2000" />

在看看其他動態效果。如要設定淡入淡出,維度是物件的透明度,即android:propertyname="alpha",淡入是from(0,不可視)到to(1),淡出是from(1)到to(0)。object animator會找到fragment的root view,然後不斷地呼叫setalpha()方法,來改變透明度,呼叫的頻率和改變的值由interpolator來決定。

如果我們要在兩個或者兩個以上的維度設定變化,可以使用set tag,對應為android的animatorset類,下面的例子同時設定向下和淡出效果。set有乙個屬性android:ordering,預設為together,即各個維度的變化同時發生,還可以設定為sequentially依次發生。

[html]view plain

copy

<?

xmlversion

="1.0"

encoding

="utf-8"

?>

<

setxmlns:android

="">

<

objectanimator

android:interpolator

="@android:interpolator/accelerate_cubic"

android:valuefrom

="1"

android:valueto

="0"

android:valuetype

="floattype"

android:propertyname

="alpha"

android:duration

="1000"

/>

<

objectanimator

android:interpolator

="@android:interpolator/accelerate_cubic"

android:valuefrom

="0"

android:valueto

="1280"

android:valuetype

="floattype"

android:propertyname

="y"

android:duration

="1000"

/>

set>

程式**的編寫

**如下:

protected void addfragmenttostack(int index) 

注意,進入和退出的兩個操作是同時進行的,並非先執行完exit再執行enter。

fragment實現Tab效果

使用下面兩句 獲取對fragment的事務處理 fragmentmanager fm getsupportfragmentmanager fragmenttransaction transaction fm.begintransaction 使用framelayout來顯示fragment,通過tr...

Fragment 實現的 分類 效果

布局檔案的資訊 activity package stu.love.game import stu.love.artical.articallistfragment import stu.love.forum.forumfragment import stu.love.utils.imagecach...

Fragment切換動畫

首先要注意的是fragment的切換是有系統提供的動畫的 public abstract fragmenttransaction settransition transit int transit 系統提供的fragment轉換動畫有 transit none,transit fragment op...