需要有关共享元素片段转换的帮助
Need help on shared element Fragment Transitions
我需要有关片段到片段转换的帮助。我不清楚如何正确地做到这一点,因为我能找到的文档很少。
我有一个带有电影的 GridView posters.When 单击一张海报它会移动到下一张 fragment.The 海报是共享元素,它会调整大小(变大)并覆盖 screen.The 其他元素将根据内容淡出 transition.This 正常工作。
我无法获得重新输入 transition.While 按下后退按钮,网格视图中的第一个元素将始终首先出现(它不遵循内容转换(淡入淡出)),然后是另一个elements fade in.The 共享元素不调整大小(变小)并加入另一个 elements.It 与其他元素一起淡入,从而遵循内容过渡样式。
这是我的代码:
NowShowingFragment.java 包含带图像的网格视图
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
setHasOptionsMenu(true);
Transition shared = TransitionInflater.from(getActivity()).inflateTransition(android.R.transition.fade);
shared.setDuration(2000);
setExitTransition(shared);
}
在我的 OnCreateView 中-我正在使用 Picasso 从 web.So 加载图像我首先从 Imageview 中提取位图并将其传递给 Activity,后者又将传递给下一个片段显示。(不知道是否应该这样做)。
mGridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
imageView = (ImageView) view.findViewById(R.id.gridImage);
Drawable drawable = imageView.getDrawable();
if (drawable instanceof BitmapDrawable) {
bmp = ((BitmapDrawable) imageView.getDrawable()).getBitmap();
} else {
return;
}
imageView.setTransitionName("Poster" + position);
mCallback.onArticleSelected(bmp, "Poster" + position, imageView);
}
});
主要Activity
@Override
public void onArticleSelected(Bitmap bmp, String name, ImageView image) {
NowShowingDetail newFragment = new NowShowingDetail();
Transition shared=TransitionInflater.from(this).inflateTransition(android.R.transition.move);
shared.setDuration(2000);
Bundle args = new Bundle();
args.putParcelable("Bitmap", bmp);
args.putString("TransitionName", name);
newFragment.setArguments(args);
newFragment.setEnterTransition(shared);
newFragment.setSharedElementEnterTransition(TransitionInflater.from(this).inflateTransition(R.transition.change_image_transform));
getSupportFragmentManager().beginTransaction().replace(R.id.now_showing_fragment, newFragment).addToBackStack(null).addSharedElement(image, image.getTransitionName()).commit();
}
In NowShowingDetail-这是将替换旧的新片段 one.It 将仅全屏显示共享元素。
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.testlayout, container, false);
ImageView imageView = (ImageView) rootView.findViewById(R.id.gridImage);
Bundle arguments = getArguments();
if (arguments != null) {
Bitmap bitmap = arguments.getParcelable("Bitmap");
imageView.setImageBitmap(bitmap);
imageView.setTransitionName(arguments.getString("TransitionName"));
}
return rootView;
}
change_image_transorm.xml
<transitionSet xmlns:android="http://schemas.android.com/apk/res/android">
<changeImageTransform
android:duration="2000"></changeImageTransform>
<changeBounds
android:duration="2000"></changeBounds>
<changeTransform
android:duration="2000"></changeTransform>
提前谢谢你。
编辑:使用相同的代码,我更改为 activity 过渡 method.This 有效 Flawlessly.I 认为我调用 Fragment 过渡的方式可能会 wrong.Your 欣赏。
我注意到片段没有共享元素退出和重新进入过渡。
引自@George Mount post:
除了没有共享元素出口和共享元素 return 转换之外,所有这些转换在片段转换中都是相同的。 Fragment Transitions 使用 FragmentTransaction 工作。您删除一个片段,然后添加一个片段,然后激活过渡。如果你删除了一个 Fragment,肯定很难像在 Activity Transition 中那样对其进行一些操作。相反,您必须在开始 FragmentTransaction 之前进行操作。
来自 https://halfthought.wordpress.com/2014/12/08/what-are-all-these-dang-transitions/
所以我认为 Fragment 转换只有一个 way.If 就是这样,那么行为是符合预期的。
在其他人给出更好的解释之前,将保持此接受状态。
我需要有关片段到片段转换的帮助。我不清楚如何正确地做到这一点,因为我能找到的文档很少。
我有一个带有电影的 GridView posters.When 单击一张海报它会移动到下一张 fragment.The 海报是共享元素,它会调整大小(变大)并覆盖 screen.The 其他元素将根据内容淡出 transition.This 正常工作。
我无法获得重新输入 transition.While 按下后退按钮,网格视图中的第一个元素将始终首先出现(它不遵循内容转换(淡入淡出)),然后是另一个elements fade in.The 共享元素不调整大小(变小)并加入另一个 elements.It 与其他元素一起淡入,从而遵循内容过渡样式。 这是我的代码:
NowShowingFragment.java 包含带图像的网格视图
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
setHasOptionsMenu(true);
Transition shared = TransitionInflater.from(getActivity()).inflateTransition(android.R.transition.fade);
shared.setDuration(2000);
setExitTransition(shared);
}
在我的 OnCreateView 中-我正在使用 Picasso 从 web.So 加载图像我首先从 Imageview 中提取位图并将其传递给 Activity,后者又将传递给下一个片段显示。(不知道是否应该这样做)。
mGridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
imageView = (ImageView) view.findViewById(R.id.gridImage);
Drawable drawable = imageView.getDrawable();
if (drawable instanceof BitmapDrawable) {
bmp = ((BitmapDrawable) imageView.getDrawable()).getBitmap();
} else {
return;
}
imageView.setTransitionName("Poster" + position);
mCallback.onArticleSelected(bmp, "Poster" + position, imageView);
}
});
主要Activity
@Override
public void onArticleSelected(Bitmap bmp, String name, ImageView image) {
NowShowingDetail newFragment = new NowShowingDetail();
Transition shared=TransitionInflater.from(this).inflateTransition(android.R.transition.move);
shared.setDuration(2000);
Bundle args = new Bundle();
args.putParcelable("Bitmap", bmp);
args.putString("TransitionName", name);
newFragment.setArguments(args);
newFragment.setEnterTransition(shared);
newFragment.setSharedElementEnterTransition(TransitionInflater.from(this).inflateTransition(R.transition.change_image_transform));
getSupportFragmentManager().beginTransaction().replace(R.id.now_showing_fragment, newFragment).addToBackStack(null).addSharedElement(image, image.getTransitionName()).commit();
}
In NowShowingDetail-这是将替换旧的新片段 one.It 将仅全屏显示共享元素。
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.testlayout, container, false);
ImageView imageView = (ImageView) rootView.findViewById(R.id.gridImage);
Bundle arguments = getArguments();
if (arguments != null) {
Bitmap bitmap = arguments.getParcelable("Bitmap");
imageView.setImageBitmap(bitmap);
imageView.setTransitionName(arguments.getString("TransitionName"));
}
return rootView;
}
change_image_transorm.xml
<transitionSet xmlns:android="http://schemas.android.com/apk/res/android">
<changeImageTransform
android:duration="2000"></changeImageTransform>
<changeBounds
android:duration="2000"></changeBounds>
<changeTransform
android:duration="2000"></changeTransform>
提前谢谢你。
编辑:使用相同的代码,我更改为 activity 过渡 method.This 有效 Flawlessly.I 认为我调用 Fragment 过渡的方式可能会 wrong.Your 欣赏。
我注意到片段没有共享元素退出和重新进入过渡。
引自@George Mount post:
除了没有共享元素出口和共享元素 return 转换之外,所有这些转换在片段转换中都是相同的。 Fragment Transitions 使用 FragmentTransaction 工作。您删除一个片段,然后添加一个片段,然后激活过渡。如果你删除了一个 Fragment,肯定很难像在 Activity Transition 中那样对其进行一些操作。相反,您必须在开始 FragmentTransaction 之前进行操作。
来自 https://halfthought.wordpress.com/2014/12/08/what-are-all-these-dang-transitions/
所以我认为 Fragment 转换只有一个 way.If 就是这样,那么行为是符合预期的。
在其他人给出更好的解释之前,将保持此接受状态。