Sebagai DialogFragment
pembungkus Dialog
kelas, Anda harus menetapkan tema ke basis Anda Dialog
untuk mendapatkan animasi yang Anda inginkan:
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)
{
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();
}
}
Kemudian Anda hanya perlu menentukan tema yang akan menyertakan animasi yang Anda inginkan. Di styles.xml tambahkan tema khusus Anda:
<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>
Sekarang tambahkan file animasi di folder res / anim :
( android:pivotY
adalah kuncinya)
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>
Terakhir, hal yang sulit di sini adalah membuat animasi Anda tumbuh dari tengah setiap baris. Saya kira baris tersebut mengisi layar secara horizontal jadi, di satu sisi android:pivotX
nilainya akan statis. Di sisi lain, Anda tidak dapat mengubah android:pivotY
nilai secara terprogram.
Yang saya sarankan adalah, Anda menentukan beberapa animasi yang masing-masing memiliki nilai persentase yang berbeda pada android:pivotY
atribut (dan beberapa tema yang mereferensikan animasi tersebut). Kemudian, saat pengguna mengetuk baris, hitung posisi Y dalam persentase baris di layar. Mengetahui posisi dalam persentase, tetapkan tema ke dialog Anda yang memiliki nilai yang sesuai android:pivotY
.
Ini bukan solusi yang tepat tetapi bisa melakukan trik untuk Anda. Jika Anda tidak menyukai hasilnya, maka saya sarankan untuk melupakan DialogFragment
dan menganimasikan View
pertumbuhan sederhana dari tengah baris yang tepat.
Semoga berhasil!