Estou mostrando um DialogFragment
quando o usuário toca em uma linha em a ListView
. Gostaria de animar a exibição do diálogo para que cresça a partir do centro da linha. Um efeito semelhante pode ser visto ao abrir uma pasta no inicializador.
Uma ideia que tive é uma combinação de TranslateAnimation
e ScaleAnimation
. Existe outra maneira?
android
android-fragments
android-animation
Edward Dale
fonte
fonte
Respostas:
Sendo
DialogFragment
um wrapper para aDialog
classe, você deve definir um tema para sua baseDialog
para obter a animação desejada:Depois, basta definir o tema que incluirá a animação desejada. Em styles.xml, adicione seu tema personalizado:
Agora adicione os arquivos de animação na pasta res / anim :
(
android:pivotY
é a chave)anim_in.xml
anim_out.xml
Finalmente, o complicado aqui é fazer a animação crescer a partir do centro de cada linha. Suponho que a linha está preenchendo a tela horizontalmente, então, por um lado, o
android:pivotX
valor será estático. Por outro lado, você não pode modificar oandroid:pivotY
valor programaticamente.O que eu sugiro é que você defina várias animações, cada uma com um valor percentual diferente no
android:pivotY
atributo (e vários temas fazendo referência a essas animações). Então, quando o usuário tocar na linha, calcule a posição Y em porcentagem da linha na tela. Sabendo a posição em porcentagem, atribua um tema ao seu diálogo que tenha oandroid:pivotY
valor apropriado .Não é uma solução perfeita, mas pode fazer o truque para você. Se você não gostar do resultado, sugiro que esqueça
DialogFragment
oe anime umView
crescimento simples do centro exato da linha.Boa sorte!
fonte
setStyle(DialogFragment.STYLE_NORMAL, R.style.MyCustomTheme)
emonCreate(bundle)
Consulte: developer.android.com/reference/android/app/DialogFragment.htmlVeja este código, funciona para mim
// Animação deslizante
// Slide dowm animation
// Estilo
// Fragmento de Diálogo Interno
fonte
DialogFragment tem um método getTheme () público que você pode substituir por este motivo exato. Esta solução usa menos linhas de código:
fonte
AppTheme.NoActionBar
enquanto DialogFragment está usando o padrãoAppTheme
. O método acima resolveu meu problema por ter um tema consistente tanto no fragmento quanto na atividade.Para obter uma caixa de diálogo em tela inteira com animação, escreva o seguinte ...
Estilos:
res / anim / slide_up.xml
res / anim / slide_down.xml
Código Java:
fonte
Use a visualização de decoração dentro de onStart em seu fragmento de diálogo
fonte
Em DialogFragment, a animação personalizada é chamada onCreateDialog. 'DialogAnimation' é o estilo de animação personalizado na resposta anterior.
fonte
Você já olhou para Android Developers Training on Zooming a View ? Pode ser um bom ponto de partida.
Você provavelmente deseja criar uma extensão de classe personalizada
DialogFragment
para fazer isso funcionar.Além disso, dê uma olhada na compatibilidade da API Jake Whartons NineOldAndroids for Honeycomb Animation desde o nível 1 da API.
fonte
Se você quiser trabalhar em APIs, você deve fazer dentro de seu DialogFragemnt-> onStart e não dentro de onCreateDialog
fonte
Adicione este código aos valores anim
chamar styles.xml
No código java: set Onclick
configuração no método:
fonte