用android 5.0 過場動畫
HomeTopic topic=homeTopics.get(position); Bundle bundle = new Bundle(); bundle.putString(WebBrowseActivity._TITLE, ""); bundle.putString("shareImg",String.valueOf(view.getTag(R.id.img_id))); bundle.putString(WebBrowseActivity._CONTENT, topic.getUrl()); Intent intent=new Intent(itemView.getContext(),TopicWebBrowseActivity.class); intent.putExtras(bundle); Context context=itemView.getContext(); ActivityOptionsCompat compat= ActivityOptionsCompat.makeSceneTransitionAnimation((Activity) context, view,context.getString(R.string.share_topic));ActivityCompat.startActivity((Activity) context,intent,compat.toBundle());
偶爾拋出以下錯誤
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.view.ViewGroup.transformMatrixToGlobal(android.graphics.Matrix)' on a null object reference at android.view.GhostView.calculateMatrix(GhostView.java:95) at android.app.ActivityTransitionCoordinator$GhostViewListeners.onPreDraw(ActivityTransitionCoordinator.java:951) ....
一. 解決方法(當(dāng)屏幕旋轉(zhuǎn)等動作引起共享view的變化,返回可能就拋這個錯,這個這么處理):
private boolean mOrientationChanged; @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); mOrientationChanged = !mOrientationChanged; } @Override public void supportFinishAfterTransition() { if (mOrientationChanged) { /** * if orientation changed, finishing activity with shared element * transition may cause NPE if the original element is not visible in the returned * activity due to new orientation, we just finish without transition here */ finish(); } else { super.supportFinishAfterTransition(); }}
二. 晚上發(fā)現(xiàn)問題又復(fù)現(xiàn)了,經(jīng)過測試與調(diào)試,發(fā)現(xiàn)我輪播圖有關(guān)。
首頁輪播圖,點(diǎn)擊進(jìn)去第二個activity,由于沒有停止輪播,如果在二個activity頁面久了,返回就會拋出異常,應(yīng)該是原來共享的imageview返回時候,找不到原來第一個activity共享的imageview,就會拋錯。
故解決方法。
在第一個activity onPause時候停止輪播,返回時候onResume開始輪播,這樣返回共享的imageview不被回收。
public void startAutoPlay(){ mImgSwitchId.startBannerPlay(); } public void stopAutoPlay(){ mImgSwitchId.stopBannerPlay(); }