Сбой при анимации вложенных представлений в общем элементе Переход активности?
Я возился с новыми API в Android 5.0 и пытался выяснить, возможно ли анимировать оба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
переход? Если так, что я делаю неправильно и что я могу сделать, чтобы взгляды детей также были анимированными?
Если у вас возникли проблемы с выполнением моих описаний, полный исходный код этого примера проекта доступен наGitHub и работоспособный APK доступен для скачиванияВот (вам понадобится физическое устройство или эмулятор под управлением Android 5.0 для запуска APK).