unc*_*sen 58 android fragment material-design
我正在尝试实现具有"共享元素"的片段之间的转换,如新材料设计规范中所述.我能找到的唯一方法是ActivityOptionsCompat.makeSceneTransitionAnimation,我认为它仅适用于Activity.我一直在寻找相同的功能,但有/片段.
ar3*_*34z 45
我遇到了同样的问题,但是通过从另一个片段添加一个新片段来实现它.以下链接非常有助于开始:https://developer.android.com/training/material/animations.html#Transitions
以下是我的代码.我正在ImageView从一个片段到另一个片段进行动画制作.确保View您想要动画的内容android:transitionName在两个片段中都相同.其他内容并不重要.
作为测试,您可以将其复制到布局xml文件中.确保图像存在.
<ImageView
android:transitionName="MyTransition"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="centerCrop"
android:src="@drawable/test_image" />
Run Code Online (Sandbox Code Playgroud)
然后我的文件res/transition夹中有一个名为change_image_transform.xml的文件.
<?xml version="1.0" encoding="utf-8"?>
<transitionSet xmlns:android="http://schemas.android.com/apk/res/android">
<changeImageTransform />
</transitionSet>
Run Code Online (Sandbox Code Playgroud)
现在你可以开始了.假设您有片段A包含图像并想要添加片段B.
在片段A中运行:
@Override
public void onClick(View v) {
switch(v.getId()) {
case R.id.product_detail_image_click_area:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
setSharedElementReturnTransition(TransitionInflater.from(getActivity()).inflateTransition(R.transition.change_image_transform));
setExitTransition(TransitionInflater.from(getActivity()).inflateTransition(android.R.transition.explode));
// Create new fragment to add (Fragment B)
Fragment fragment = new ImageFragment();
fragment.setSharedElementEnterTransition(TransitionInflater.from(getActivity()).inflateTransition(R.transition.change_image_transform));
fragment.setEnterTransition(TransitionInflater.from(getActivity()).inflateTransition(android.R.transition.explode));
// Our shared element (in Fragment A)
mProductImage = (ImageView) mLayout.findViewById(R.id.product_detail_image);
// Add Fragment B
FragmentTransaction ft = getFragmentManager().beginTransaction()
.replace(R.id.container, fragment)
.addToBackStack("transaction")
.addSharedElement(mProductImage, "MyTransition");
ft.commit();
}
else {
// Code to run on older devices
}
break;
}
}
Run Code Online (Sandbox Code Playgroud)
小智 21
我发布这个作为答案,因为我是新来的,无法发表评论.
只要源视图和目标视图具有相同(且唯一)的transitionName ,共享元素片段转换就可以与ListView一起使用.
如果您使列表视图适配器将唯一的transitionNames设置为您想要的视图(例如某些常量+特定项ID)并且还更改您的详细信息片段以在运行时(onCreateView)将相同的transitionNames设置为目标视图,则转换实际上可以正常工作!
Jor*_*rdy 11
共享元素可以与Fragments一起使用,但有一些事情要记住:
不要试图设置sharedElementsTransition在onCreateView您的片段的.您必须在创建Fragment的实例时或在其中定义它们onCreate.
请注意有关进入/退出转换和sharedElementTransition的可能动画的官方文档.他们不一样.
试验和错误:)
| 归档时间: |
|
| 查看次数: |
43504 次 |
| 最近记录: |