ApiDemos 動(dòng)畫(huà)淺探

導(dǎo)入ApiDemos

1、下載源碼 Github ApiDemos
2、在Android Studio 中導(dǎo)入項(xiàng)目(具體導(dǎo)入步驟在文后有鏈接)

遇到的問(wèn)題

除了在參考鏈接中遇到的問(wèn)題外,還有些自身而引起的問(wèn)題
1、compileSdkVersion引起的問(wèn)題,導(dǎo)入項(xiàng)目后,默認(rèn)是23,而項(xiàng)目中用到了24的部分新屬性,導(dǎo)致編譯失?。ń鉀Q:直接改成最新的25)
2、minSdkVersion 同樣默認(rèn)是23,導(dǎo)致無(wú)法安裝到手機(jī)上,把版本改低
3、安裝到手機(jī)上或者模擬器時(shí)出現(xiàn)INSTALL_FAILED_CONFLICTING_PROVIDER的錯(cuò)誤,這里我繞了彎路了,我知道是沖突的錯(cuò)誤,然后就想通過(guò)修改包名的方法來(lái)達(dá)到共存,一開(kāi)始我在包名后面再加了一個(gè)名字,然后代碼一頓報(bào)錯(cuò),都是因?yàn)镽文件引起的,改了一陣之后發(fā)現(xiàn)行不通,需要修改的地方太多。
最終重來(lái),還是修改包名,但這次不是通過(guò)加減的方式,而是直接該名字,這樣通常只需要改兩處地方,一是直接Refactor 一> Rename,二是修改applicationId,但因?yàn)轫?xiàng)目中用到了aidl,所以還需要首先修改aidl文件中的包名,如此就可以正常運(yùn)行了。

動(dòng)畫(huà)

主要看了Activity Transition 動(dòng)畫(huà)的實(shí)現(xiàn),簡(jiǎn)單實(shí)現(xiàn)一個(gè)ImageView在兩個(gè)Activity中過(guò)渡切換或者說(shuō)元素共享Shared Element
ActivityA中點(diǎn)擊代碼

   public void clicked(View v) {
        mHero = (ImageView) v;//得到要共享的元素ImageView
        Intent intent = new Intent(this, ActivityTransitionDetails.class);
        //這里將圖片資源傳遞,不是實(shí)現(xiàn)該效果的核心必需代碼
        intent.putExtra(KEY_ID, v.getTransitionName());
        //關(guān)鍵代碼,第三個(gè)參數(shù)必須對(duì)應(yīng)ActivityB中ImageView的 android:transitionName 屬性值
        ActivityOptions activityOptions
                = ActivityOptions.makeSceneTransitionAnimation(this, mHero, "hero");
        startActivity(intent, activityOptions.toBundle());
    }

ActivityB中,只需在布局文件ImageView的屬性android:transitionName設(shè)置位"hero"即可實(shí)現(xiàn)效果了

那如果在ActivityB中的布局文件中不設(shè)置android:transitionName,該怎么弄個(gè),貌似也是可以的,看代碼

    //接收數(shù)據(jù)
     String name = getIntent().getStringExtra(KEY_ID);
     mHero = null;
     if (name != null) {
         //找到對(duì)應(yīng)的ImageView
         mHero = (ImageView) findViewById(getIdForKey(name));
         //設(shè)置共享元素
         setEnterSharedElementCallback(new SharedElementCallback() {
             @Override
             public void onMapSharedElements(List<String> names,
                        Map<String, View> sharedElements) {
                 sharedElements.put("hero", mHero);
             }
         });
     }

如果是按第一段代碼進(jìn)行實(shí)現(xiàn),在點(diǎn)擊返回的時(shí)候,只需調(diào)用onBackPressed();即可。

注目前只有在API21及以上才能通過(guò)上述代碼實(shí)現(xiàn)

參考鏈接

安卓開(kāi)發(fā)入門(mén)篇(一):Android Studio導(dǎo)入ApiDemos 講怎么導(dǎo)入ApiDemos及遇到的問(wèn)題
深入理解共享元素變換(Shared Element Transition) 講共享元素變換的實(shí)現(xiàn)思路

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,287評(píng)論 25 708
  • 習(xí)慣了學(xué)校的自由,初入職場(chǎng)的我意識(shí)到原來(lái)一睜開(kāi)眼定神之后發(fā)現(xiàn)還能在床上賴(lài)著的周末是那么幸福!
    魚(yú)不淚閱讀 172評(píng)論 0 0
  • 我們上學(xué)的時(shí)候,是不是經(jīng)常被老師的提問(wèn)弄的很沒(méi)面子?如果有一天我們當(dāng)了老師,應(yīng)該如何提問(wèn)? 好的問(wèn)題即能讓學(xué)生參預(yù)...
    萬(wàn)能的老J閱讀 699評(píng)論 8 7
  • 任性的我看了看比我還瘦弱的錢(qián)包。我不管了!今天要談錢(qián)。 正所謂錢(qián)到用時(shí)方很少,怎么才能把錢(qián)hold住,道理人人都懂...
    是一溪云兒閱讀 1,127評(píng)論 30 31
  • “去吧,那是你的路?!鄙n老的目光,堅(jiān)毅的嘴臉,又是那句話(huà)。 我的身后,是我自己的選擇。 我的面前,...
    黎季閱讀 207評(píng)論 0 0