Не показывать переход, если вид не виден
У меня есть список продуктов, если я нажму на один, изображение продукта перейдет в подробный экран.
И если я вернусь, изображение будет перенесено обратно в список.
Это отлично работает.
Проблема в том, что когда я прокручиваю свой экран подробностей, изображение больше не видно.
Но когда я возвращаюсь к экрану со списком, изображение все еще передается, в результате чего происходит глючный переход.
Пример видео здесь
Я хочу добиться чего-то вроде 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>
Есть идеи, как реализовать поведение, которого я хочу достичь?
1 ответ
С помощью следующей ссылки вы можете узнать, является ли представление внутри свитка видимым или нет: /questions/44363030/android-kak-proverit-viden-li-vid-iznutri-scrollview/44363070#44363070
Затем вы можете сделать простой метод, чтобы узнать, виден ли ваш imageView внутри прокрутки, подобно этому простому примеру:
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(); }
- Вариант 2: перезаписать метод onScroll (и каждый раз при прокрутке прокрутки) вы можете зарегистрировать или отменить регистрацию анимации, если вид виден. Код в этой опции похож на предыдущий.
Удачи! Мне очень нравится ваша анимация, я видел ее в YouTube.:)