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

歡迎訪問 生活随笔!

生活随笔

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

Android

[Android]Fragment自定义动画、动画监听以及兼容性包使用

發布時間:2025/5/22 Android 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [Android]Fragment自定义动画、动画监听以及兼容性包使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  Fragment是Android在API 11之后加入的一個組件,對提高Android開發中的布局合理性和布局效率都有很大作用,尤其是在Android平板等大屏幕設備的開發中,Fragment的引入能更好地利用較大的屏幕空間。

  本文主要說明Fragment使用簡介、Fragment自定義動畫的使用、監聽動畫過程、以及在較低API版本中使用兼容性包來實現上述功能。

?

  首先簡要說一下添加Fragment方法,可以直接在Activity的布局文件中加入fragment標簽

<fragment android:name="com.example.test.ExampleFragment"android:id="@+id/example_fragment"android:layout_width="wrap_content"android:layout_height="wrap_content"/>

也可以在代碼中將Fragment加入已存在的ViewGroup中

FragmentManager fragmentManager = getFragmentManager(); FragmentTransaction ft = fragmentManager.beginTransaction(); ExampleFragment fragment = new ExampleFragment(); ft.add(R.id.fragment_container, fragment); ft.commit();

而在Fragment類中加入UI則只需要在Fragment類中重寫onCreateView方法,并在方法中添加布局文件

@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {// TODO Auto-generated method stubreturn inflater.inflate(R.layout.example_fragment, container, false);}

?

  第二,為Fragment添加動畫。添加自帶動畫效果很簡單,只需要在添加Fragment或者進行Fragment動作變化時為FragmentTransaction對象添加setTransaction()方法,自帶的動畫效果有:FragmentTransaction.TRANSIT_FRAGMENT_OPEN、TRANSIT_FRAGMENT_CLOSE、TRANSIT_FRAGMENT_FADE等等,任君選擇。而除了add()添加fragment方法之外還有replace()、show()、hide()等不同的操作。

FragmentTransaction ft = getFragmentManager().beginTransaction(); ft.add(R.id.fragment_container, fragment, "ExampleFragment").setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN).commit();

如果這些自帶動畫效果不能滿足我們的要求,比如想要實現Fragment的滑動效果,就需要自定義動畫了。添加自定義動畫的方法是setCustomAnimations(int enter, int exit),這兩個參數分別是進入和離開兩個動畫的資源文件ID。使用方法如下,注意setCustomAnimations方法必須在replace或者add等方法之前被調用。

FragmentTransaction ft = getFragmentManager().beginTransaction();ft.setCustomAnimations(R.anim.fragment_in, R.anim.fragment_out); ft.replace(R.id.fragment_container, newFragment, "fragment"); // Start the animated transition. ft.commit();

然后就是自己定義動畫文件fragment_in.xml和fragment_out.xml了,但是這里有個非常要注意的問題,原生庫android.app.Fragment支持的動畫不再是以前的含有<translate>標簽的動畫了,而是新的<objectAnimator>標簽。比如定義向左滑入動畫我們以前都是這么寫的

<?xml version="1.0" encoding="utf-8"?> <set><translate xmlns:android="http://schemas.android.com/apk/res/android"android:fromXDelta="100%p"android:toXDelta="0"android:interpolator="@android:anim/decelerate_interpolator"android:duration="300"/> </set>

但是如果在原生Fragment動畫中使用此描述文件,會出現不認識translate標志的錯誤,新的動畫描述方法如下:

<?xml version="1.0" encoding="utf-8"?> <set><objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"android:propertyName="x" android:valueType="floatType"android:valueFrom="1280"android:valueTo="0" android:duration="300"/> </set>

這樣寫進入和離開動畫效果就沒有問題了。在這里有個問題我暫時沒明白,在使用<translate>時可使用fromXDelta="100%p"這樣的方式以百分比的形式定義位置,而在<objectAnimator>貌似沒找到這種相對的定義方法,有高手知道還請賜教~

至于為什么Google要這么蛋疼弄一種新的動畫定義方式我也不特別能理解。。。就跟Animation和Animator一樣。

?

  第三,在我們自定義好動畫后,有時候需要判斷我的動畫有沒有開始?有沒有結束?這時就需要對動畫執行狀態進行監聽。對此,可以在Fragment類中重寫一個onCreateAnimator()方法,這個方法會在執行動畫時被調用。在方法中設置動畫Animator的監聽器。如下:

@Overridepublic Animator onCreateAnimator(int transit, boolean enter, int nextAnim) {final Animator anim = AnimatorInflater.loadAnimator(getActivity(), nextAnim);anim.addListener(new AnimatorListenerAdapter(){@Overridepublic void onAnimationStart(Animator animation){//動畫開始 }@Overridepublic void onAnimationEnd(Animator animation){//動畫結束 }});return anim;}

?

  最后,上面說的一切都是在API 11也就是3.0以上的系統中原生支持的,如果我們需要在支持低于3.0系統的app中使用Fragment該怎么辦呢?這時的自定義動畫和動畫監聽又將如何?下面來說明這些問題。

  解決的方法很簡單,原生不足,兼容來補。為了增加對低版本系統的兼容性,Android提供了一個兼容性庫,叫做android-support-v4.jar(有了這個庫,媽媽再也不用擔心我的應用兼容性了),這個包現在在新建工程時應該就帶著了,而其對應的兼容性包android.support.v4.app中,就包含有Fragment這個類。也就是說,支持老版本的app(MiniSDK選API 11以下)在使用Fragment時,就直接繼承自android.support.v4.app.Fragment,而不繼承自原生的android.app.Fragment。同樣,FragmentTransaction和FragmentManager來自這個兼容性包,這里要注意的是來自這個包的獲取FragmentManager的方法不再是getFragmentManager(),而是getSupportFragmentManager()。

  使用這個兼容性包之后,添加自定義動畫的過程仍和之前一致,不過由于是低版本的兼容性包,所以描述動畫的xml文件中,我們又需要用回以前<translate>的描述方法,其實這對用習慣這種動畫定義方法的人來說還是比較方便的。(又可以用相對位置定義了。。。)

  使用兼容性包的Fragment我們仍然想監聽動畫狀態,但這時發現繼承自兼容性包的Fragment已經找不到可重寫的方法onCreateAnimator()了,這時,會出現另一個更老、我們更熟悉的方法onCreateAnimation(),同樣,重寫這個方法并在其中為Animation對象設置監聽器以實現對動畫狀態的監聽。

@Overridepublic Animation onCreateAnimation(int transit, boolean enter, int nextAnim) {Animation anim = AnimationUtils.loadAnimation(getActivity(), nextAnim);anim.setAnimationListener(new AnimationListener() {public void onAnimationStart(Animation animation) {//動畫開始 }public void onAnimationRepeat(Animation animation) {//動畫循環 }public void onAnimationEnd(Animation animation) {//動畫結束 }});return anim;}

  

  以上,就是我總結的Fragment動畫相關的一些內容。

?

轉載于:https://www.cnblogs.com/lcyty/p/3383960.html

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的[Android]Fragment自定义动画、动画监听以及兼容性包使用的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 国产不卡视频 | 亚洲伦理在线视频 | 99热在线国产 | 久久久精品人妻一区二区三区四 | 久久久无码18禁高潮喷水 | aa片在线观看视频在线播放 | 日产精品久久久久久久蜜臀 | 男女做爰猛烈吃奶啪啪喷水网站 | 一区二区日韩在线观看 | 成人免费毛片男人用品 | 亚洲第一a| 亚洲va天堂va欧美ⅴa在线 | 国产经典毛片 | 国产一区网站 | 91九色porn | h片免费观看| 国产网站无遮挡 | 国产av自拍一区 | 亚洲无打码 | 秋霞综合网 | 91视频看看 | 成人在线观看网址 | 极品少妇一区二区 | 最新天堂在线视频 | 国产无套内射又大又猛又粗又爽 | 精品影视 | 自宅警备员在线观看 | 91黄瓜视频 | 综合激情五月婷婷 | 中文字幕一区二区三区免费看 | 免费在线黄色网址 | 2022av视频 | 中文不卡av| 性欧美bbw| 欧美日韩成人一区二区三区 | 全肉的吸乳文 | 青青伊人av| 国产精品丝袜黑色高跟鞋的设计特点 | 美女131爽爽爽做爰视频 | 国产福利在线导航 | 精品一区二区三区在线观看视频 | 五月天导航 | 欧美一区二区三区免费在线观看 | 高h在线观看 | 天天曰夜夜操 | wwwxx在线观看 | 五月天中文字幕 | 中国丰满老妇xxxxx交性 | 久久久久国产精品一区二区 | 天堂av在线免费 | 欧美成人tv | 大胸奶汁乳流奶水出来h | 男人天堂av电影 | 动漫av一区二区 | 国产美女免费视频 | 动漫av一区二区 | 成年人免费高清视频 | 欧美一级高清片 | 日本高清视频免费观看 | 日韩在线视频中文字幕 | 亚洲图片偷拍区 | 日本美女交配 | 国产奶头好大揉着好爽视频 | 三级网站在线免费观看 | 国产三级视频 | 亚洲成av人片在线观看无码 | 国产乱码久久久久 | 日本xxxxxxxxx69 | 免费在线一区二区三区 | 日一日干一干 | 国产精品免费一区二区区 | 国产精品亚洲二区在线观看 | 欧美日韩一区二区在线视频 | 午夜天堂精品久久久久 | 国产精品一卡二卡在线观看 | 伊人久久青草 | 住在隔壁的她动漫免费观看全集下载 | 久草久热| 欧美极品一区 | www.蜜桃av.com| 先锋影音资源av | 成人在线观看网站 | 999www | 久久久噜噜噜www成人 | 国产欧美综合视频 | 麻豆精品免费视频 | 成人午夜视频在线免费观看 | 久久婷婷国产麻豆91天堂 | 尤物国产在线 | 国产无套精品 | 午夜国产精品视频 | 国产a三级 | 免费人妻精品一区二区三区 | 亚洲区小说区图片区qvod | 色亚洲欧美 | 欧美熟妇久久久久 | 色综合五月 | 在线观看亚洲网站 | 亚洲欧美少妇 |