詳解Android(共享元素)轉(zhuǎn)場(chǎng)動(dòng)畫開發(fā)實(shí)踐
最近零碎時(shí)間一直在研究OpenGL,所以沒怎么進(jìn)行分享,以后可能大部分時(shí)間會(huì)學(xué)習(xí)系統(tǒng)底層\NDK\VR\AR等領(lǐng)域,話不多少,今天來分享個(gè)小的動(dòng)畫效果.
效果如下

基本知識(shí)
其實(shí)Android的轉(zhuǎn)場(chǎng)動(dòng)畫由來已久,比如平常開發(fā)安卓的時(shí)候界面切換 都是右進(jìn)右出,這樣的效果,就是早期的轉(zhuǎn)場(chǎng)動(dòng)畫,在5.0之后安卓官方支持了共享元素的效果,那么問題來了,5.0以后該怎么適配?
準(zhǔn)備步驟
定義兩個(gè)activity,界面跳轉(zhuǎn)是從A到B.
ActivityA定義一個(gè)控件View,在跳轉(zhuǎn)時(shí)傳入到Pair里面,詳細(xì)代碼如下:
switch (v.getId()) {
case R.id.tv_open_video:
SigleVideoPlayer.startMe(mContext,tvOpenVideo);
break;
}
ActivityB詳細(xì)代碼如下
public static void startMe(BaseMvpActivity mContext, View view) {
Intent intent = new Intent(mContext, SigleVideoPlayer.class);
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
Pair pair = new Pair<>(view, IMG_TRANSITION);
ActivityOptionsCompat activityOptions = ActivityOptionsCompat.makeSceneTransitionAnimation(
mContext, pair);
ActivityCompat.startActivity(mContext, intent, activityOptions.toBundle());
} else {
mContext.startActivity(intent);
mContext.overridePendingTransition(R.anim.abc_fade_in, R.anim.abc_fade_out);
}
}
并在oncreate之后添加如下代碼:
private void initTransition() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
postponeEnterTransition();
ViewCompat.setTransitionName(button, IMG_TRANSITION);
addTransitionListener();
startPostponedEnterTransition();
} else {
// 處理你自己的邏輯
}
}
設(shè)置動(dòng)畫監(jiān)聽
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
private boolean addTransitionListener() {
transition = getWindow().getSharedElementEnterTransition();
if (transition != null) {
transition.addListener(new OnTransitionListener(){
@Override
public void onTransitionEnd(Transition transition) {
super.onTransitionEnd(transition);
// 動(dòng)畫完成之后 處理你自己的邏輯
transition.removeListener(this);
}
});
return true;
}
return false;
}
總結(jié)
大家可以看到,這里面的代碼不僅做了適配,同時(shí)設(shè)置了動(dòng)畫監(jiān)聽,無需使用三方庫即可實(shí)現(xiàn)你自己的轉(zhuǎn)場(chǎng)動(dòng)畫.
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Android轉(zhuǎn)場(chǎng)動(dòng)畫深入分析探究
- Android?Flutter實(shí)現(xiàn)頁面切換轉(zhuǎn)場(chǎng)動(dòng)畫效果
- Android實(shí)現(xiàn)Reveal圓形Activity轉(zhuǎn)場(chǎng)動(dòng)畫的完整步驟
- Android工具欄頂出轉(zhuǎn)場(chǎng)動(dòng)畫的實(shí)現(xiàn)方法實(shí)例
- Android5.0之Activity的轉(zhuǎn)場(chǎng)動(dòng)畫的示例
- Android中轉(zhuǎn)場(chǎng)動(dòng)畫的實(shí)現(xiàn)與兼容性處理
- Android轉(zhuǎn)場(chǎng)效果實(shí)現(xiàn)示例淺析
相關(guān)文章
Flutter TV Android端開發(fā)技巧詳細(xì)教程
這篇文章主要為大家介紹了Flutter TV Android端開發(fā)技巧詳細(xì)教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12
Android從源碼的角度徹底理解事件分發(fā)機(jī)制的解析(上)
這篇文章主要介紹了Android從源碼的角度徹底理解事件分發(fā)機(jī)制的解析,具有很好的參考價(jià)值,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-05-05
Android實(shí)現(xiàn)自定義驗(yàn)證碼輸入框效果(實(shí)例代碼)
這篇文章主要介紹了Android實(shí)現(xiàn)自定義驗(yàn)證碼輸入框效果,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-01-01
Android studio 自動(dòng)換行和取消自動(dòng)換行操作
這篇文章主要介紹了Android studio 自動(dòng)換行和取消自動(dòng)換行操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-04-04
Android使用Rotate3dAnimation實(shí)現(xiàn)3D旋轉(zhuǎn)動(dòng)畫效果的實(shí)例代碼
利用Android的ApiDemos的Rotate3dAnimation實(shí)現(xiàn)了個(gè)圖片3D旋轉(zhuǎn)的動(dòng)畫,圍繞Y軸進(jìn)行旋轉(zhuǎn),還可以實(shí)現(xiàn)Z軸的縮放。點(diǎn)擊開始按鈕開始旋轉(zhuǎn),點(diǎn)擊結(jié)束按鈕停止旋轉(zhuǎn)。2018-05-05
Android實(shí)現(xiàn)拍照、選擇相冊(cè)圖片并裁剪功能
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)拍照、選擇相冊(cè)圖片并裁剪功能的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-12-12
解決django 多個(gè)APP時(shí) static文件的問題
這篇文章主要介紹了解決django 多個(gè)APP時(shí) static文件的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-03-03
Android中極簡(jiǎn)的js與java的交互庫(SimpleJavaJsBridge)
本文主要介紹了Android中極簡(jiǎn)的js與java的交互庫--SimpleJavaJsBridge,它可以讓js與java之間的通信更簡(jiǎn)單。 具有很好的參考價(jià)值,下面跟著小編一起來看下吧2017-01-01
android判斷phonegap是否聯(lián)網(wǎng)且加載super.loadUrl網(wǎng)址
android判斷phonegap是否聯(lián)網(wǎng)動(dòng)態(tài)加載super.loadUrl網(wǎng)址,接下來本文所提供的知識(shí)會(huì)幫助你解決以上問題,感興趣的你可不要錯(cuò)過了哈2013-02-02

