2

Я показываю изображения фильма в viewpager. Всякий раз, когда пользователь выбирает изображение, он будет анимироваться (изменяться) и рисоваться на другом мероприятии. Проблема в том, что я не могу правильно реализовать анимацию.ImageView Shared Element Переход между фрагментом и активностью

Это код моего ViewPager (внутри MoviesPager.java фрагмент):

View v = inflater.inflate(R.layout.pager_fragment, container, false); 
poster = (ImageView) v.findViewById(R.id.selectedMoviePoster); 
final View sharedView=poster; 
final String transitionName=y.getOriginalTitle(); 
ActivityCompat.startActivity(getActivity(),sendMovie, ActivityOptions.makeSceneTransitionAnimation(getActivity(),sharedView,transitionName).toBundle()); 

Здесь «у» является объектом фильм, который будет отображаться.

Это код MainActivity.java, внутри которого осуществляется ViewPager:

getWindow().requestFeature(Window.FEATURE_ACTIVITY_TRANSITIONS);//=<item name="android:windowActivityTransitions">true</item>*/ 
getWindow().setExitTransition(new Fade());//=<item name="android:windowExitTransition">@transition/fade</item> 
getWindow().setSharedElementExitTransition(new ChangeImageTransform());//same as above 

Это код Movie.java, который отображает информацию о фильме

getWindow().requestFeature(Window.FEATURE_ACTIVITY_TRANSITIONS); 
getWindow().setEnterTransition(new Fade()); 
getWindow().setSharedElementEnterTransition(new ChangeImageTransform()); 

название Transition устанавливается как:

1) in activity_main.xml

<android.support.v4.view.ViewPager 
    android:id="@+id/currentMoviesViewPager" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:transitionName="viewPagerTransition"/> 

2) в activity_movie.xml

<android.support.design.widget.AppBarLayout 
    android:id="@+id/appbar" 
    android:layout_width="match_parent" 
    android:layout_height="300dp" 
    android:fitsSystemWindows="true" 
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> 

    <android.support.design.widget.CollapsingToolbarLayout 
     android:id="@+id/collapsing_toolbar" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:fitsSystemWindows="true" 
     app:contentScrim="?attr/colorAccent" 
     app:expandedTitleMarginEnd="64dp" 
     app:expandedTitleMarginStart="48dp" 
     app:layout_scrollFlags="scroll"> 

     <ImageView 
      android:id="@+id/selectedMoviePoster" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      app:layout_collapseMode="parallax" 
      app:layout_collapseParallaxMultiplier="1"/> 

     <android.support.v7.widget.Toolbar 
      android:id="@+id/toolbar" 
      android:layout_width="match_parent" 
      android:layout_height="?attr/actionBarSize" 
      app:layout_collapseMode="pin" 
      app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/> 

     <View 
      android:layout_width="match_parent" 
      android:layout_height="10dp" 
      android:background="@android:color/white" 
      app:layout_collapseMode="parallax" 
      app:layout_collapseParallaxMultiplier="1"/> 

    </android.support.design.widget.CollapsingToolbarLayout> 

</android.support.design.widget.AppBarLayout> 

3) в pager_fragment.xml который является XML для фрагмента ViewPager

<android.support.v7.widget.CardView 
    xmlns:card_view="http://schemas.android.com/apk/res-auto" 
    android:id="@+id/card_view" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_gravity="center" 
    card_view:cardElevation="40dp" 
    card_view:cardCornerRadius="4dp" 
    android:clipChildren="false" 
    android:clipToPadding="false"> 


    <ImageView 
     android:id="@+id/selectedMoviePoster" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"/> 

    <ProgressBar 
     android:id="@+id/loadPosterProgress" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center"/> 

</android.support.v7.widget.CardView> 

И я использую Universal Image Loader в обоих действиях для загрузки и отображения изображения.

Также, если возможно, я могу хранить изображения перед загрузкой, чтобы я не загружался каждый раз. Изменение размера изображения в режиме просмотра изображений также отлично работает.

Я использовал две разные темы для обоих видов деятельности, и вот код.

4) styles.xml:

<resources> 

<!-- Base application theme. --> 
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> 
    <!-- Customize your theme here. --> 
    <item name="colorPrimary">@color/colorPrimary</item> 
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item> 
    <item name="colorAccent">@color/colorAccent</item> 
    <item name="android:windowBackground">@android:color/darker_gray</item> 
    <item name="android:windowContentTransitions">true</item> 
</style> 

<style name="Theme.AppCompat.Light.FullScreen"> 
    <item name="windowNoTitle">true</item> 
    <item name="windowActionBar">false</item> 
    <item name="android:windowBackground">@android:color/darker_gray</item> 
    <item name="android:windowContentTransitions">true</item> 
</style> 

+0

Для кэширования загруженных изображений с помощью принять Универсальный Image Loader посмотреть на здесь: http://escrow.aliexpress.com : //stackoverflow.com/questions/25968252/how-to-use-universal-image-loader-offline-caching – RamithDR

ответ

0

Что вы можете сделать для этого перехода:

    View sharedView = holder.event_pic; 
        String transitionName = mContext.getString(R.string.event_image); 
        Intent intent_event_description = new Intent(mContext, EventDescription.class); 
        if (Build.VERSION.SDK_INT >= 21) { 
         ActivityOptions transitionActivityOptions = ActivityOptions.makeSceneTransitionAnimation(activity, sharedView, transitionName); 
         mContext.startActivity(intent_event_description, transitionActivityOptions.toBundle()); 
        } 

Убедитесь, что вы обеспечить одинаковые идентификаторы для обоих изображений.

В вашей теме стиль:

<item name="android:windowContentTransitions">true</item> 

Укажите такое же имя перехода к обоим изображениям:

  <ImageView 
      android:id="@+id/selectedMoviePoster" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      app:layout_collapseMode="parallax" 
      android:transitionName="selectedMoviePoster" 
      app:layout_collapseParallaxMultiplier="1"/> 

      <ImageView 
      android:id="@+id/selectedMoviePoster" 
      android:layout_width="match_parent" 
      android:transitionName="selectedMoviePoster" 
      android:layout_height="match_parent"/> 
+0

Спасибо за быстрый ответ. Это сработало, но у меня все еще есть проблемы. Сначала он показывал полный белый экран, но теперь он по крайней мере показывает анимацию для активности и изображения на следующем экране, но все равно не может получить анимацию для этого плаката/изображения. Это то, что происходит: https: //www.dropbox.com/s/2sfy50p15lbpsdh/20160905-120104.mp4? Dl = 0. Может быть, потому что загружается другое изображение? Что может быть решением этого? –

+0

вы можете опубликовать обновленный код? – Nidhi

+0

, пожалуйста, проверьте код –

Смежные вопросы