关于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) ....

一. 解决方法(当屏幕旋转等动作引起共享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(); }}

二. 晚上发现问题又复现了,经过测试与调试,发现我轮播图有关。
首页轮播图,点击进去第二个activity,由于没有停止轮播,如果在二个activity页面久了,返回就会抛出异常,应该是原来共享的imageview返回时候,找不到原来第一个activity共享的imageview,就会抛错。
故解决方法。
在第一个activity onPause时候停止轮播,返回时候onResume开始轮播,这样返回共享的imageview不被回收。
public void startAutoPlay(){ mImgSwitchId.startBannerPlay(); } public void stopAutoPlay(){ mImgSwitchId.stopBannerPlay(); }

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,401评论 25 709
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 11,891评论 0 17
  • Day1: 在代码中通过R.string.hello_world可以获得该字符串的引用; 在XML中通过@stri...
    冰凝雪国阅读 5,364评论 0 5
  • ¥开启¥ 【使用jni实现Tost】 〖2017-08-20 22:15:04〗 《在xx.cpp中写入以下代码€...
    小菜c阅读 4,359评论 0 1
  • PythonIDE安装 常用的IDE(根据自己的喜好选择,并无太多的优劣之分,适合自己的才是最好的)VIM:适用于...
    Lv_0阅读 3,584评论 0 1

友情链接更多精彩内容