關(guān)于android 5.0過場動畫(android.view.ViewGroup.transformMatrixToGlobal(android.graphics.Matrix)' on a null object reference)

用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(); }

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,917評論 25 709
  • ¥開啟¥ 【iAPP實(shí)現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個線程,因...
    小菜c閱讀 7,317評論 0 17
  • Day1: 在代碼中通過R.string.hello_world可以獲得該字符串的引用; 在XML中通過@stri...
    冰凝雪國閱讀 1,621評論 0 5
  • ¥開啟¥ 【使用jni實(shí)現(xiàn)Tost】 〖2017-08-20 22:15:04〗 《在xx.cpp中寫入以下代碼€...
    小菜c閱讀 925評論 0 1
  • PythonIDE安裝 常用的IDE(根據(jù)自己的喜好選擇,并無太多的優(yōu)劣之分,適合自己的才是最好的)VIM:適用于...
    Lv_0閱讀 610評論 0 1

友情鏈接更多精彩內(nèi)容