Glitch beim Animieren verschachtelter Ansichten in einem gemeinsamen Element Aktivitätsübergang?
Ich habe mit den neuen APIs in Android 5.0 rumgespielt und versucht herauszufinden, ob es möglich ist, beide @ zu animiereViewGroup
und eines seiner Kinder separat als sha, rote Elemente während einesAktivitätsübergang.
Die folgenden Screenshots geben ein vereinfachtes Beispiel dafür, was ich erreichen möchte:
In der ersten Aktivität ist das dunkelgraue Kästchen einViewGroup
zentriert auf dem Bildschirm und das rote Kästchen ist sein KindView
(Der von mir verwendete Layout-XML-Code ist zu finden.Hie). Wenn der Benutzer auf das dunkelgraue Feld klickt, sollte das dunkelgraue Feld schrittweise vergrößert werden, um den Hintergrund der zweiten Aktivität auszufüllen. Gleichzeitig sollte sich das rote Feld schrittweise skalieren und in der oberen linken Ecke der zweiten Aktivität neu positionieren.
DasActivity
code, mit dem ich den Übergang durchführe, ist einfach:
/** 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);
}
}
Das ProbleWenn ich in der ersten Aktivität auf das dunkelgraue Kästchen klicke, beginnt der Übergang zum gemeinsam genutzten Element und das dunkelgraue Kästchen wird schön vergrößert, um den Hintergrund der zweiten Aktivität auszufüllen.Das rote Kästchen scheint jedoch überhaupt nicht zu animieren. Sobald der Übergang beginnt, ändert sich die Größe der roten Box abrupt und positioniert sich an ihrer endgültigen Position innerhalb der zweiten Aktivität, bevor die graue Box die Animation abgeschlossen hat.
Meine FragIst es möglich sowohl ein @ zu animierViewGroup
und eines / einige / alle seiner untergeordneten Elemente werden unabhängig voneinander als gemeinsam genutzte Elemente in einem @ angezeigActivity
Überleitung? Wenn ja, was mache ich falsch und was kann ich tun, um sicherzustellen, dass auch die Ansichten der Kinder animiert sind?
Wenn Sie Probleme hatten, meinen Beschreibungen zu folgen, finden Sie den vollständigen Quellcode für dieses Beispielprojekt unter GitHub und ein lauffähiges APK steht zum Download bereitHie (Sie benötigen ein physisches Gerät oder einen Emulator mit Android 5.0, um das APK auszuführen.