11

私のアプリケーションのメイン画面には、画像のグリッドビューが含まれています。ユーザ がイメージを選択すると、詳細アクティビティは、詳細アクティビティの CardViewにあるペアイメージに選択されたグリッドイメージをアニメートする共有要素 トランジションを使用して開始されます。CoordinatorLayoutおよびCollapsingToolbarLayoutと組み合わせても、共有要素の遷移が機能しない

CollapsingToolbarLayoutと 一緒CoordinatorLayoutを含むように私の詳細ビューのXMLレイアウトをアップグレードした後、共有要素の遷移について詳細活性(「入力」活性)で間違った場所に画像 ビューを移動させます。 フレームワークは、 CollapseingToobarLayout全体をオフセットして、 には、対象の画像ビューが含まれているCardViewの上にCollapsingToolBarLayoutがない場合に、画像 の概略位置にアニメーション表示されるようです。

問題がactivity_detail.xml 3 CardViewsのいずれかに(transitionName有する) ImageViewのを添加することによってクリスBanes' cheesesquare sample appで複製することができる。

<ImageView 
android:id="@+id/imageView" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:src="@mipmap/ic_launcher" 
android:transitionName="sharedImage" /> 

、次いでセットアップ共有要素転移 CheeseListFragment.javaでonBindViewHolderで次のように:

@Override 
public void onBindViewHolder(final ViewHolder holder, int position) { 
     holder.mBoundString = mValues.get(position); 
     holder.mTextView.setText(mValues.get(position)); 

     holder.mView.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Context context = v.getContext(); 
       Intent intent = new Intent(context, CheeseDetailActivity.class); 
       intent.putExtra(CheeseDetailActivity.EXTRA_NAME, holder.mBoundString); 

       holder.mImageView.setTransitionName("sharedImage");       
       ActivityOptionsCompat options = ActivityOptionsCompat. 
         makeSceneTransitionAnimation(
           getActivity(v.getContext()), 
              holder.mImageView,      
              "sharedImage"); 
       ActivityCompat.StartActivity((MyActivity) context, intent, options.toBundle()); 
      } 
     }); 

     Glide.with(holder.mImageView.getContext()) 
       .load(Cheeses.getRandomCheeseDrawable()) 
       .fitCenter() 
       .into(holder.mImageView); 
    } 

アプリケーションを実行し、チーズのリスト項目をクリックすると、あなたはどのようにます遷移アニメーションは、 宛先アクティビティビューで不適切な(大きすぎる)オフセットに画像を移動します。アニメーションが完了すると、画像は と表示され、正しい位置に「ワープ」します。

可能な回避策に関する考えは大歓迎です。

+0

私はこの問題の修正を発見しました。これは私のレポにあります https://github.com/lawloretienne/SharedElementTransition – toobsco42

答えて

2

答えは、簡単に、シンプル、cheesesquare activity_detail.xmlレイアウトである。このように見えます...

<android.support.design.widget.CoordinatorLayout 
    android:fitsSystemWindows="true" 
    ...> 

    <android.support.design.widget.AppBarLayout 
     android:fitsSystemWindows="true" 
     ...> 

     <android.support.design.widget.CollapsingToolbarLayout 
      android:fitsSystemWindows="true" 
      ...> 

      <ImageView 
       android:fitsSystemWindows="true" 
       ... /> 

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

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

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

    <android.support.v4.widget.NestedScrollView 
     app:layout_behaviour="@string/appbar_scrolling_view_behaviour" 
     ...> 

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

このレイアウトと間違っている何アンドロイドということです:fitsSystemWindowsプロパティがダウンして伝播する必要がありますレイアウトチェーンをすべてのコンテナに追加し、公開されたデモアプリケーションでは、このプロパティはNestedScrollViewには表示されません。 NestedScrollViewを

に変更する
 <android.support.v4.widget.NestedScrollView 
     app:layout_behaviour="@string/appbar_scrolling_view_behaviour" 
     android:fitsSystemWindows="true" 
     ...> 

この問題を修正しました。これはおそらくデモGithubコードで変更する必要があります。

+0

cheesesquareの詳細に似たレイアウトがあると、ナビゲーションバーとステータスバーでちらつきが表示されます画面レイアウト。どのように共有要素の移行のためにこれを修正しますか? – toobsco42

+0

答えはこの記事で見つけることができます。 http://stackoverflow.com/questions/26600263/how-do-i-prevent-the-status-bar-and-navigation-bar-from-animating-during-an-acti –

0

解決済み!

以前のアクティビティからコーディネータレイアウトを含むアクティビティへの共有要素の移行中に共有要素を構成するコーディネータレイアウトを使用している誰かがこのエラーに直面した場合、移行アニメーション中に誤って配置されます。これは、デザインサポートライブラリのバージョン"com.android.support:design:22.2"のバグです。0"

ソリューション:

変更バージョンに "com.android.support:design:23.1.0" build.gradleで(アプリ)

すべてが意図どおりに機能するはずです。これは私にとってはうまくいって、多くの研究の後にこの解決策を見つけました。

+0

申し訳ありませんUdit、あなたの解決策はありません問題を解決してください。私はデザインでそれをテストしました:23.1.1そしてそれはまだ現れます。携帯電話のデベロッパーオプションに行き、アニメーションを5倍遅くすれば、ワーピングを見ることができます。テストはNexus 6 API 22(エミュレータ)で行いました。 fitSystemWindows属性をNestedScrollViewに追加すると、すでに述べたように問題が修正されます。 –

+0

まだ23.3.0のデザインで問題が発生しています。 – Sdghasemi

関連する問題