Para animar a transição entre fragmentos ou para animar o processo de mostrar ou ocultar um fragmento, use o Fragment Manager
para criar umFragment Transaction
.
Dentro de cada transação de fragmento, você pode especificar animações de entrada e saída que serão usadas para mostrar e ocultar respectivamente (ou ambas quando a substituição for usada).
O código a seguir mostra como você substituiria um fragmento deslizando um fragmento e deslizando o outro em seu lugar.
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_right);
DetailsFragment newFragment = DetailsFragment.newInstance();
ft.replace(R.id.details_fragment_container, newFragment, "detailFragment");
// Start the animated transition.
ft.commit();
Para conseguir a mesma coisa ao ocultar ou mostrar um fragmento, você simplesmente chamaria ft.show
ou ft.hide
, passando o fragmento que deseja mostrar ou ocultar, respectivamente.
Para referência, as definições de animação XML usariam a objectAnimator
tag Um exemplo de slide_in_left pode ser algo como isto:
<?xml version="1.0" encoding="utf-8"?>
<set>
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
android:propertyName="x"
android:valueType="floatType"
android:valueFrom="-1280"
android:valueTo="0"
android:duration="500"/>
</set>
Se você não precisar usar a biblioteca de suporte, consulte a resposta de Roman .
Mas se você quiser usar a biblioteca de suporte, precisará usar a estrutura de animação antiga, conforme descrito abaixo.
Depois de consultar as respostas de Reto e blindstuff, obtive o seguinte código funcionando.
Os fragmentos aparecem deslizando da direita e deslizando para a esquerda quando a parte traseira é pressionada.
A ordem é importante. Isso significa que você deve ligar
setCustomAnimations()
antesreplace()
ou a animação não terá efeito!Em seguida, esses arquivos devem ser colocados dentro da pasta res / anim .
enter.xml :
exit.xml :
pop_enter.xml :
pop_exit.xml :
A duração das animações pode ser alterada para qualquer um dos valores padrão como
@android:integer/config_shortAnimTime
ou qualquer outro número.Observe que, entre substituições de fragmentos, ocorre uma alteração na configuração (por exemplo, rotação) a ação de retorno não é animada. Este é um erro documentado que ainda existe na versão 20 da biblioteca de suporte.
fonte
Eu sugiro que você use isso em vez de criar o arquivo de animação, porque é uma solução muito melhor. O Android Studio já fornece o padrão que
animation
você pode usar sem criar nenhum novo arquivo XML. Os nomes das animações são android.R.anim.slide_in_left e android.R.anim.slide_out_right e você pode usá-los da seguinte maneira:Resultado:
fonte
Minha biblioteca de suporte modificado suporta o uso de animações de exibição (por exemplo
<translate>, <rotate>
) e animadores de objetos (<objectAnimator>
por exemplo) para transições de fragmentos. É implementado com NineOldAndroids . Consulte minha documentação no github para obter detalhes.fonte
Quanto a mim, preciso da diraction view:
Aqui funciona para mim código:
slide_in_right.xml
slide_out_left.xml
código da transação:
fonte
Eu resolvo isso da maneira Abaixo
fonte