Essendo DialogFragmentun wrapper per la Dialogclasse, dovresti impostare un tema sulla tua base Dialogper ottenere l'animazione che desideri:
public class CustomDialogFragment extends DialogFragment implements OnEditorActionListener
{
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
{
return super.onCreateView(inflater, container, savedInstanceState);
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState)
{
// Set a theme on the dialog builder constructor!
AlertDialog.Builder builder =
new AlertDialog.Builder( getActivity(), R.style.MyCustomTheme );
builder
.setTitle( "Your title" )
.setMessage( "Your message" )
.setPositiveButton( "OK" , new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which) {
dismiss();
}
});
return builder.create();
}
}
Quindi devi solo definire il tema che includerà l'animazione desiderata. In styles.xml aggiungi il tuo tema personalizzato:
<style name="MyCustomTheme" parent="@android:style/Theme.Panel">
<item name="android:windowAnimationStyle">@style/MyAnimation.Window</item>
</style>
<style name="MyAnimation.Window" parent="@android:style/Animation.Activity">
<item name="android:windowEnterAnimation">@anim/anim_in</item>
<item name="android:windowExitAnimation">@anim/anim_out</item>
</style>
Ora aggiungi i file di animazione nella cartella res / anim :
( android:pivotYè la chiave)
anim_in.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<scale
android:interpolator="@android:anim/linear_interpolator"
android:fromXScale="0.0"
android:toXScale="1.0"
android:fromYScale="0.0"
android:toYScale="1.0"
android:fillAfter="false"
android:startOffset="200"
android:duration="200"
android:pivotX = "50%"
android:pivotY = "-90%"
/>
<translate
android:fromYDelta="50%"
android:toYDelta="0"
android:startOffset="200"
android:duration="200"
/>
</set>
anim_out.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<scale
android:interpolator="@android:anim/linear_interpolator"
android:fromXScale="1.0"
android:toXScale="0.0"
android:fromYScale="1.0"
android:toYScale="0.0"
android:fillAfter="false"
android:duration="200"
android:pivotX = "50%"
android:pivotY = "-90%"
/>
<translate
android:fromYDelta="0"
android:toYDelta="50%"
android:duration="200"
/>
</set>
Infine, la cosa difficile qui è far crescere la tua animazione dal centro di ogni riga. Suppongo che la riga riempia lo schermo orizzontalmente, quindi, da un lato, il android:pivotXvalore sarà statico. D'altra parte, non è possibile modificare il android:pivotYvalore a livello di codice.
Quello che suggerisco è che tu definisci diverse animazioni ognuna delle quali ha un diverso valore percentuale sull'attributo android:pivotY(e diversi temi che fanno riferimento a tali animazioni). Quindi, quando l'utente tocca la riga, calcola la posizione Y in percentuale della riga sullo schermo. Conoscendo la posizione in percentuale, assegna un tema al tuo dialogo che abbia il android:pivotYvalore appropriato .
Non è una soluzione perfetta ma potrebbe fare il trucco per te. Se non ti piace il risultato, ti suggerisco di dimenticare DialogFragmente animare una semplice Viewcrescita dal centro esatto della riga.
In bocca al lupo!