導(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)思路