Falha ao animar vistas aninhadas em um elemento compartilhado Transição de atividade?
Venho brincando com as novas APIs no Android 5.0 e tentando descobrir se é possível animar ou não umViewGroup
e um de seus filhos separadamente como sha, elementos vermelhos durante umTransição de atividade.
As capturas de tela abaixo dão um exemplo simplificado do que estou tentando alcançar:
Na primeira atividade, a caixa cinza escura é umaViewGroup
centralizado na tela e a caixa vermelha é seu filhoView
(o código XML do layout que estou usando pode ser encontradoaqui) Quando o usuário clica na caixa cinza escura, a caixa cinza escura deve aumentar gradualmente para preencher o segundo plano da atividade. Ao mesmo tempo, a caixa vermelha deve aumentar gradualmente e se reposicionar no canto superior esquerdo da segunda atividade.
oActivity
O código que estou usando para realizar a transição é simples:
/** 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);
}
}
O problemaQuando clico na caixa cinza escura na primeira atividade, a transição do elemento compartilhado é iniciada e a caixa cinza escura aumenta de tamanho para preencher o segundo plano da segunda atividade.No entanto, a caixa vermelha não parece animar. Assim que a transição começa, a caixa vermelha é redimensionada abruptamente e se posiciona em seu local final na segunda atividade antes que a caixa cinza termine de animar.
Minha perguntaÉ possível animar umViewGroup
e um / alguns / todos os seus filhos vêem independentemente como elementos compartilhados em umActivity
transição? Nesse caso, o que estou fazendo de errado e o que posso fazer para garantir que as visualizações das crianças também sejam animadas?
Se você teve problemas para seguir minhas descrições, o código fonte completo deste exemplo de projeto está disponível emGitHub e um APK executável está disponível para downloadaqui (você precisará de um dispositivo físico ou emulador com Android 5.0 para executar o APK).