R4j*_*R4j 6 android android-transitions android-recyclerview
我有全局应用程序中的Feed数据列表.我用这个代码,以从我的转变RecyclerView中MainAcitivty
// selected item event
Intent intent = new Intent(this, DetailActivity.class);
intent.putExtra("item_feed_index", selectedItemIndex);
FeedViewHolder viewHolder = getViewHolderFromPosition(position);
Pair<View, String> pair1 = Pair.create(viewHolder.imageView, "TransitionName.Feed.Image");
Pair<View, String> pair2 = Pair.create(viewHolder.textView, "TransitionName.Feed.Text");
Pair<View, String> pair3 = Pair.create(viewHolder.button, "TransitionName.Feed.Button");
ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(this, pair1, pair2, pair3);
startActivity(intent, options.toBundle());
Run Code Online (Sandbox Code Playgroud)
它确实有效.但问题在于DetailActivity,我有另一个垂直列表,用户可以向下/向上滚动以更改列表中的Feed项(这也会更改滚动索引).
按回来时DetailActivity,我希望退出动画转换执行正确的查看源索引.我怎样才能做到这一点?
这是代码onActivityResult中MainActivity,它滚动循环到正确的位置,但出口过渡动画是不正确的位置.
int currentFeedIndex = Application.getInstance().getCurrentViewingFeed();
if (currentFeedIndex > 0 && currentFeedIndex < adapter.getItemCount()) {
if (gridLayoutManager != null) {
gridLayoutManager.scrollToPositionWithOffset(currentFeedIndex + 1, 0);
}
}
Run Code Online (Sandbox Code Playgroud)
我正在寻找在运行退出动画之前更改配对列表的方法
更新:这是DetailActivity的布局,我在其中为视图指定转换名称
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/imgFeed"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:transitionName="TransitionName.Feed.Image" />
<TextView
android:id="@+id/tvLogo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:transitionName="TransitionName.Feed.Text"/>
<Button
android:transitionName="TransitionName.Feed.Button"
android:id="@+id/btn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="40dp"
android:layout_below="@+id/tvLogo"/>
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)
关于呼叫者活动:
String itemId; //set your item id here
Intent intent = new Intent(this, DetailActivity.class);
intent.putExtra("item_feed_index", selectedItemIndex);
intent.putExtra("item_id", itemId);
String imageViewTransitionName = "TransitionName.Feed.Image." + itemId;
String textViewTransitionName = "TransitionName.Feed.Text." + itemId;
String buttonTransitionName = "TransitionName.Feed.Button." + itemId;
ViewCompat.setTransitionName(viewHolder.imageView, imageViewTransitionName);
ViewCompat.setTransitionName(viewHolder.textView, textViewTransitionName);
ViewCompat.setTransitionName(viewHolder.button, buttonTransitionName);
Pair<View, String> pair1 = Pair.create(viewHolder.imageView, imageViewTransitionName);
Pair<View, String> pair2 = Pair.create(viewHolder.textView, textViewTransitionName);
Pair<View, String> pair3 = Pair.create(viewHolder.button, buttonTransitionName);
ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(this, pair1, pair2, pair3);
startActivity(intent, options.toBundle());
Run Code Online (Sandbox Code Playgroud)
然后在您的目的地中,Activity您只需为每个视图获取itemId并Intent设置正确的转换名称即可。
String itemId = getIntent().getString("item_id");
String imageViewTransitionName = "TransitionName.Feed.Image." + itemId;
String textViewTransitionName = "TransitionName.Feed.Text." + itemId;
String buttonTransitionName = "TransitionName.Feed.Button." + itemId;
ViewCompat.setTransitionName(findViewById(R.id.imageView), imageViewTransitionName);
ViewCompat.setTransitionName(findViewById(R.id.textView), textViewTransitionName);
ViewCompat.setTransitionName(findViewById(R.id.button), buttonTransitionName);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
999 次 |
| 最近记录: |