Là DialogFragment
một trình bao bọc cho Dialog
lớp học, bạn nên đặt một chủ đề cho cơ sở của mình Dialog
để có được hoạt ảnh bạn muốn:
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();
}
}
Sau đó, bạn chỉ cần xác định chủ đề sẽ bao gồm hoạt ảnh mong muốn của bạn. Trong styles.xml, thêm chủ đề tùy chỉnh của bạn:
<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>
Bây giờ thêm các tệp hoạt ảnh trong thư mục res / anim :
(chính android:pivotY
là chìa khóa)
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>
Cuối cùng, điều khó khăn ở đây là làm cho hoạt ảnh của bạn phát triển từ trung tâm của mỗi hàng. Tôi cho rằng hàng đang lấp đầy màn hình theo chiều ngang, vì vậy, một mặt android:pivotX
giá trị sẽ là tĩnh. Mặt khác, bạn không thể sửa đổi android:pivotY
giá trị theo chương trình.
Những gì tôi đề xuất là, bạn xác định một số hoạt ảnh, mỗi hoạt ảnh có một giá trị phần trăm khác nhau trên android:pivotY
thuộc tính (và một số chủ đề tham chiếu đến các hoạt ảnh đó). Sau đó, khi người dùng nhấn vào hàng, hãy tính vị trí Y theo phần trăm của hàng trên màn hình. Biết vị trí theo tỷ lệ phần trăm, hãy gán chủ đề có android:pivotY
giá trị thích hợp cho hộp thoại của bạn .
Nó không phải là một giải pháp hoàn hảo nhưng có thể giúp bạn. Nếu bạn không thích kết quả, thì tôi khuyên bạn nên bỏ qua DialogFragment
và tạo hoạt ảnh cho một View
sự phát triển đơn giản từ chính giữa hàng.
Chúc may mắn!