वर्ग के DialogFragment
लिए एक आवरण होने के नाते Dialog
, आपको अपने Dialog
इच्छित एनीमेशन को प्राप्त करने के लिए अपने बेस पर एक थीम सेट करना चाहिए :
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();
}
}
फिर आपको बस उस थीम को परिभाषित करने की आवश्यकता है जिसमें आपका वांछित एनीमेशन शामिल होगा। में styles.xml आपकी कस्टम थीम जोड़ें:
<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>
अब Res / एनिमेशन फोल्डर में एनीमेशन फाइल्स जोड़ें :
( android:pivotY
कुंजी है)
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>
अंत में, यहां मुश्किल बात यह है कि प्रत्येक पंक्ति के केंद्र से अपने एनीमेशन को विकसित करना है। मुझे लगता है कि पंक्ति क्षैतिज रूप से स्क्रीन को भर रही है, इसलिए एक तरफ android:pivotX
मूल्य स्थिर होगा। दूसरी ओर, आप android:pivotY
मान को प्रोग्रामेटिक रूप से संशोधित नहीं कर सकते ।
मेरा सुझाव है कि, आप कई एनिमेशनों को परिभाषित करते हैं, जिनमें से प्रत्येक की android:pivotY
विशेषता पर एक अलग प्रतिशत मूल्य है (और उन एनिमेशन को संदर्भित करने वाले कई थीम)। फिर, जब उपयोगकर्ता पंक्ति को टैप करता है, तो स्क्रीन पर पंक्ति के प्रतिशत में वाई स्थिति की गणना करें। प्रतिशत में स्थिति जानने के बाद, अपने संवाद के लिए एक विषय निर्दिष्ट करें जिसका उचित android:pivotY
मूल्य है।
यह एक सही समाधान नहीं है, लेकिन आप के लिए चाल कर सकता है। यदि आपको परिणाम पसंद नहीं है, तो मैं सुझाव दूंगा कि आप पंक्ति के सटीक केंद्र से DialogFragment
एक साधारण View
वृद्धि को भूल जाएं और उसे अनुप्राणित करें ।
सौभाग्य!