我有一个产品列表,如果我点击一个产品,产品的图像将转换为详细信息屏幕。
如果我回去,图像将转换回列表
这很好用。
问题是当我在细节屏幕中向下滚动时,图像不再可见 但是当我回到列表屏幕时,图像仍然会转换,结果是一个错误的过渡。
视频示例here
我希望实现Play Store之类的功能 如果图像不再可见,则没有返回动画。
开始详细活动:
Intent intent = new Intent(getActivity(), ProductDetailActivity.class);
intent.putExtra(ProductDetailActivity.EXTRA_PRODUCT, product);
Bundle options = ActivityOptionsCompat.makeSceneTransitionAnimation(getActivity(),
productViewHolder.getProductCover(), productViewHolder.getProductCover().getTransitionName()).toBundle();
getActivity().startActivity(intent, options);
在DetailActivity中,我设置了转换名称:
coverImageView.setTransitionName(getString(R.string.transition_key_product_cover_with_id, product.getId()));
styles.xml:
<item name="android:windowContentTransitions">true</item>
知道如何实现我想要实现的行为吗?
答案 0 :(得分:0)
使用以下链接,您可以知道滚动内的视图是否可见:https://stackoverflow.com/a/12428154/4097924
然后你可以用一个简单的方法来知道你的imageView在scrollview中是否可见,类似于这个简单的例子:
public boolean isVisibleInsideScroll(){
Rect scrollBounds = new Rect();
scrollView.getHitRect(scrollBounds);
if (imageView.getLocalVisibleRect(scrollBounds)) {
// Any portion of the imageView, even a single pixel, is within the visible window
return true;
} else {
// NONE of the imageView is within the visible window
return false;
}
}
然后我看到两个可能的选项,我没有证明:
选项1:覆盖onBack方法(如果你有另一个方法,可以回过头去)。在方法内部,您可以在离开屏幕之前显示元素时指定转换:
@Override
public void onBackPressed(){
if(isVisibleInsideScroll()){
coverImageView.setTransitionName(getString(R.string.transition_key_product_cover_with_id, product.getId()));
}
super.onBackPressed();
}