2017-04-11 8 views
4

に意図したシナリオであるとして遷移が動作しません入力してください。マスターは画像付きのRecyclerViewリストです。詳細はLinearLayoutで親のリストからのヘッダー画像です。トランジションは、XMLで宣言され、そのように細部の活動にバインドされていますRecyclerViewのアダプタの移行でAndroidの活動は、ここでの重複ビュー

<item name="android:windowSharedElementEnterTransition">@transition/activity_enter_shared</item> 
<item name="android:windowEnterTransition">@transition/activity_enter</item> 

はそうのようにトリガーされます。

final ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(
    mContext, 
    imgView, 
    ViewCompat.getTransitionName(imgView) 
); 
mContext.startActivity(new Intent(mContext, ChildActivity.class), options.toBundle()); 

問題がある: @transition/activity_enterで私はfadeを適用していますいくつかのレイアウト要素(例えば、戻るボタン)で。これらの要素はのFrameLayoutに配置されます。これは、画面にスムーズに表示される代わりに、 "ポップイン"というfadeビューの問題を引き起こすようです。 これは、ビューが重複している場合にのみが発生します。LinearLayoutに配置された場合は、すべてが意図したとおりに動作します。

fadeはそうよう@transition/activity_enterで宣言されている:

<fade 
    android:startDelay="300" 
    android:duration="100" 
    android:interpolator="@android:interpolator/linear"> 
    <targets> 
     <target android:targetId="@id/target_id" /> 
    </targets> 
</fade> 

注1からActivityfadeでプログラムトリガ場合は正常に動作:

final ViewGroup frame = (ViewGroup) findViewById(R.id.frame); 
frame.setOnClickListener(new View.OnClickListener() { 
    boolean visible; 

    @Override 
    public void onClick(View v) { 
     TransitionManager.beginDelayedTransition(frame); 
     visible = !visible; 
     frame.findViewById(R.id.target_id).setVisibility(visible ? View.VISIBLE : View.GONE); 
    } 
}); 

注2 - 共有遷移(@transition/activity_enter_shared)カスタムですが、デフォルトのものを使用しても問題は解決しません。

注3 - 最も簡単な、レイアウトでは、次のようになります。

<FrameLayout> 
    <ImageView /> 
    <ImageButton android:id="@+id/target_id" /> 
</FrameLayout/> 

しかし、問題はFrameLayoutに特異的であるが、ビューのかなり重複していません。

注4 - 。イプサムがフェードインする一方たとえば、次のようなレイアウトにLoremのが、中にポップアップ表示されます

enter image description here

答えて

0

さてさて、私が興味のある人のために、答えを見つけました。

私は私のスタイル定義に

<item name="android:windowSharedElementsUseOverlay">false</item> 

を設定する必要がありました。 documentationから

は、共有要素が 遷移時にオーバーレイを使用する必要があるかどうかを示します。デフォルト値はtrueです。