MaterialContainerTransform中的壁画视图未显示

问题描述 投票:0回答:1

我有一个Activity-A(RecyclerView)和Activity-B(ViewPager),在RecyclerView材质上单击该项目,然后在ViewPager中将该项目转换为Activity-B。在活动B上着陆时,壁画图像视图不可见。在这里,过渡过程顺利进行,但无法看到freso图像视图,如果我在viewPager中滑动页面,则可以看到图像

关于活动A

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        window.requestFeature(Window.FEATURE_ACTIVITY_TRANSITIONS)
        setExitSharedElementCallback(MaterialContainerTransformSharedElementCallback())
        window.sharedElementsUseOverlay = false
        setContentView(R.layout.activity_main)
}

onClick

val intent = Intent(context, DetailActivity::class.java)
intent.putExtra(DetailActivity.ARG_POSITION, position)
intent.putExtra(DetailActivity.ARG_TAB, viewModel.selectedTabItem)
val options = ActivityOptions.makeSceneTransitionAnimation(activity,it,it.transitionName)
startActivity(intent, options.toBundle())

关于活动B

override fun onCreate(savedInstanceState: Bundle?) {
  findViewById<View>(android.R.id.content).transitionName = "shared-container-$position"
  setEnterSharedElementCallback(MaterialContainerTransformSharedElementCallback())
  window.sharedElementEnterTransition = MaterialContainerTransform().apply {
      duration = 1000
  }
  window.sharedElementReturnTransition = MaterialContainerTransform().apply {
      duration = 1000
  }
}
android material-design fresco
1个回答
0
投票

这是共享元素转换的一个已知问题,不能正确设置Fresco用来确定图像是否显示在屏幕上的可见性(出于内存管理的目的,请参见https://github.com/facebook/fresco/issues/1445

这里的一个解决方法是监听共享元素的结束事件,并手动将图像的可见性设置为可见,如下所示:

ActivityCompat.setExitSharedElementCallback(this, new SharedElementCallback() {
            @Override
            public void onSharedElementEnd(List<String> sharedElementNames, List<View> sharedElements, List<View> sharedElementSnapshots) {
                super.onSharedElementEnd(sharedElementNames, sharedElements, sharedElementSnapshots);
                if (FP.empty(sharedElements)) {
                    return;
                }
                for (View view : sharedElements) {
                    if (view instanceof SimpleDraweeView) {
                        ((SimpleDraweeView) view).getDrawable().setVisible(true, true);
                    }
                }
            }
        });
© www.soinside.com 2019 - 2024. All rights reserved.