我一直在研究Android 5.0中的新API,并试图弄清楚在Activity转换期间是否可能分别对
下面的截图给出了我试图实现的简化示例:
ViewGroup
及其子项进行共享元素动画。下面的截图给出了我试图实现的简化示例:
在第一个活动中,深灰色框是居中于屏幕的
ViewGroup
,红色框是它的子View
(我使用的布局XML代码可以在这里找到)。当用户点击深灰色框时,深灰色框应逐渐缩放以填充第二个活动的背景。同时,红色框应逐渐缩放并重新定位到第二个活动的左上角。
活动和动画代码
我用的Activity
代码很简单:/** FirstActivity.java */
public class FirstActivity extends Activity implements View.OnClickListener {
private View mOuterBox, mInnerBox;
@Override
protected void onCreate(Bundle savedInstanceState) {
getWindow().requestFeature(Window.FEATURE_ACTIVITY_TRANSITIONS);
getWindow().setSharedElementExitTransition(new ChangeBounds());
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_first);
mOuterBox = findViewById(R.id.outer_box);
mInnerBox = findViewById(R.id.inner_box);
mOuterBox.setOnClickListener(this);
}
@Override
public void onClick(View v) {
Pair<View, String> outerBox = Pair.create(mOuterBox, mOuterBox.getTransitionName());
Pair<View, String> innerBox = Pair.create(mInnerBox, mInnerBox.getTransitionName());
Bundle bundle = ActivityOptions.makeSceneTransitionAnimation(this, outerBox, innerBox).toBundle();
startActivity(new Intent(this, SecondActivity.class), bundle);
}
}
/** SecondActivity.java */
public class SecondActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
getWindow().requestFeature(Window.FEATURE_ACTIVITY_TRANSITIONS);
getWindow().setSharedElementEnterTransition(new ChangeBounds());
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
}
}
问题
当我点击第一个活动中的深灰色框时,共享元素转换开始并且深灰色框很好地缩放以填充第二个活动的背景。 然而,红色框似乎根本没有动画效果。一旦转换开始,红色框就会在灰色框甚至还没有完成动画之前突然调整大小并将自己定位到第二个活动中的最终位置。
我的问题
是否可能独立地将ViewGroup
和其某些/所有子视图作为共享元素在Activity
转换中进行动画处理?如果可以,我做错了什么,我该怎么做才能确保子视图也得到动画处理?