একটি কাস্টম ডায়ালগ অ্যানিমেট করুন


98

আমি একটি কাস্টম ডায়লগটি এমনভাবে উপস্থিত করার চেষ্টা করছি যেন এটি কোনও পাঠ্য ভিউ থেকে সরে যায়। এটা কি সম্ভব? আমি ডায়ালগ ক্লাসে কোনও অ্যানিমেশন প্রয়োগ করার মতো মনে করতে পারি না। আমি কনস্ট্রাক্টরে এই লাইনটি চেষ্টা করেছি, তবে এর কোনও প্রভাব নেই:

this.getWindow ()। setWindowAnimations (R.anim.paranimation);

অ্যানিমেশনটি সঠিক কিনা তাও আমি নিশ্চিত নই, তবে এটি কী করছে তা একবার দেখলে আমি এটিকে সামঞ্জস্য করতে সক্ষম হব। সম্পূর্ণতার জন্য এটি নীচে তালিকাবদ্ধ করব। আমি আসল অ্যানিমেশনটিতে সাহায্যের সন্ধান করছি না, কেবলমাত্র ডায়ালগের জন্য অ্যাপ্লিকেশন।

paniimation.xML:

<?xml version="1.0" encoding="utf-8"?>
<translate
xmlns:android="http://schemas.android.com/apk/res/android"
android:fromXDelta="-200%"
    android:toXDelta="0%"
    android:fromYDelta="200%"
    android:toYDelta="0%"
    android:duration="3000"
    android:zAdjustment="top">
</translate>

4
আমার এটিও জানা দরকার। এগুলি ব্যতীত অন্য কোনও কিছুতে প্রাণবন্ত হওয়া সম্ভব বলে মনে হয়। না আমি ভুল ?!
andy_spoo

উত্তর:


218

আমি আজ ডায়লগ অ্যানিমেশন নিয়ে লড়াই করছি, অবশেষে এটি শৈলী ব্যবহার করে কাজ করেছি, সুতরাং এখানে একটি উদাহরণ দেওয়া হল।

শুরু করার জন্য, সর্বাধিক গুরুত্বপূর্ণ বিষয় - আমার সম্ভবত এটি আজ 5 টি বিভিন্ন উপায়ে কাজ করেছে তবে বলতে পারিনি কারণ ... আপনার ডিভাইসগুলির অ্যানিমেশন সেটিংস যদি "অ্যানিমেশন নেই" (সেটিংস → প্রদর্শন → অ্যানিমেশন) সেট করা থাকে তবে ডায়লগগুলি জিতেছে আপনি যাই করুক না কেন অ্যানিমেটেড হবেন না!

নীচে আমার স্টাইলস.এক্সএমএল এর স্ট্রিপ ডাউন সংস্করণ। আশা করি এটি স্ব-ব্যাখ্যামূলক। এটিতে অবস্থিত হওয়া উচিত res/values

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="PauseDialog" parent="@android:style/Theme.Dialog">
        <item name="android:windowAnimationStyle">@style/PauseDialogAnimation</item>
    </style>

    <style name="PauseDialogAnimation">
        <item name="android:windowEnterAnimation">@anim/spin_in</item>
        <item name="android:windowExitAnimation">@android:anim/slide_out_right</item>
    </style>
</resources>

windowEnterAnimationআমার অ্যানিমেশন অন্যতম এবং অবস্থিত res\animwindowExitAnimationঅ্যানিমেশন যা Android SDK এর অংশ অন্যতম।

তারপরে যখন আমি আমার ক্রিয়াকলাপ onCreateDialog(int id)পদ্ধতিতে ডায়ালগ তৈরি করি তখন আমি নিম্নলিখিতটি করি।

Dialog dialog = new Dialog(this, R.style.PauseDialog);

// Setting the title and layout for the dialog
dialog.setTitle(R.string.pause_menu_label);
dialog.setContentView(R.layout.pause_menu);

বিকল্পভাবে আপনি কোনও থিম গ্রহণকারী ডায়ালগ কনস্ট্রাক্টরটি ব্যবহার না করে নিম্নলিখিত পদ্ধতিতে অ্যানিমেশনগুলি সেট করতে পারেন।

Dialog dialog = new Dialog(this);
dialog.getWindow().getAttributes().windowAnimations = R.style.PauseDialogAnimation;

4
এই উদাহরণটির জন্য কেবলমাত্র একটি নাম আমি তৈরি করেছি, আমি আসলে কখনই সেই অ্যানিমেশনটি তৈরি করি নি।
ক্রিসজেডি

4
এই উত্তরের জন্য অনেক ধন্যবাদ, এটি সত্যই দুর্বল নথিভুক্ত, যদিও আমি এই পোস্টটি অ্যান্ড্রয়েড বিকাশকারীদের গোষ্ঠীর কাছ থেকে পেয়েছি ।
ডেভিড স্নাবেল-কাউন্ট

4
+1 "আপনার ডিভাইসগুলির অ্যানিমেশন সেটিংস যদি" ​​কোনও অ্যানিমেশন নেই "(সেটিংস → প্রদর্শন → অ্যানিমেশন) এ সেট করা থাকে তবে ডায়ালগগুলি অ্যানিমেটেড হবে না আপনি যাই করুক না কেন!"! আমি এটা পরীক্ষা করতে ভুলে গিয়েছিলাম।
ভিনসেন্ট মিমুন-প্রট

Dialog dialog = new Dialog(this, R.style.PauseDialog);এটি এপিআই 11 এর জন্য তবে এটি সাধারণDialog dialog = new Dialog(Context context);
মেহমেট

4
আমি যে সমস্যার মুখোমুখি হচ্ছি তা হ'ল আমি যখন ডায়ালগটি দেখায় এবং আবার অ্যাপ্লিকেশনটি পুনঃস্থাপন করা হয় তখন আমি অ্যাপ্লিকেশনটিকে ন্যূনতম করি, ডায়ালগটি আবার অ্যানিমেট করে, কীভাবে এড়ানো যায়, তার নিখুঁত বিশ্রামটি রাখুন। +1
পার্থ আঞ্জারিয়া

57

আমি ক্রিসজেডি কোড ব্যবহার করে ডায়ালগবক্সের জন্য ফেড ইন এবং ফেড আউট অ্যানিমেশন তৈরি করেছি।

  1. অভ্যন্তরে রেজ / স্টাইল.এক্সএমএল

    <style name="AppTheme" parent="android:Theme.Light" />
    <style name="PauseDialog" parent="@android:style/Theme.Dialog">
        <item name="android:windowAnimationStyle">@style/PauseDialogAnimation</item>
    </style>
    
    <style name="PauseDialogAnimation">
        <item name="android:windowEnterAnimation">@anim/fadein</item>
        <item name="android:windowExitAnimation">@anim/fadeout</item>
    </style>
    

  2. ভিতরে anim / fadein.xML

    <alpha xmlns:android="http://schemas.android.com/apk/res/android"
        android:interpolator="@android:anim/accelerate_interpolator"
        android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="500" />
    
  3. ভিতরে anim / fadeout.xML

    <alpha xmlns:android="http://schemas.android.com/apk/res/android"
        android:interpolator="@android:anim/anticipate_interpolator"
        android:fromAlpha="1.0" android:toAlpha="0.0" android:duration="500" />
    
  4. প্রধান কাজ

    Dialog imageDiaglog= new Dialog(MainActivity.this,R.style.PauseDialog);
    

12
আপনি ডিফল্ট অ্যান্ড্রয়েড ফেইড অ্যানিমেশনগুলি '@ অ্যান্ড্রয়েড: আনিম / ফেইড_ইন' '@ অ্যান্ড্রয়েড: আনিম / ফেইড_আউট'
মারেক

আপনাকে ধন্যবাদ, আগে আমি এই উত্তরটি পোস্ট করার সময় ছিল না। :)
অক্ষয় তারু

20

ডান থেকে বাম জন্য (এন্ট্রি অ্যানিমেশন) এবং বাম থেকে ডানে (প্রস্থান অ্যানিমেশন):

শৈলী.এক্সএমএল:

<style name="CustomDialog" parent="@android:style/Theme.Dialog">
    <item name="android:windowAnimationStyle">@style/CustomDialogAnimation</item>
</style>

<style name="CustomDialogAnimation">
    <item name="android:windowEnterAnimation">@anim/translate_left_side</item>
    <item name="android:windowExitAnimation">@anim/translate_right_side</item>
</style>

রেজ / আনিম / এ দুটি ফাইল তৈরি করুন:

অনুবাদ_সাইটি_সাইড.এক্সএমএল:

<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromXDelta="0%" android:toXDelta="100%"
    android:fromYDelta="0%" android:toYDelta="0%"
    android:duration="600"/>

অনুবাদ_ লেফট_সাইড.এক্সএমএল:

<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="600"
    android:fromXDelta="100%"
    android:toXDelta="0%"/>

আপনার খণ্ড / ক্রিয়াকলাপে:

Dialog dialog = new Dialog(getActivity(), R.style.CustomDialog);

13

আমি একই সমস্যাটি পূরণ করি, তবে শেষ পর্যন্ত আমি সমস্যাটি অনুসরণ করে সমাধান করি

((ViewGroup)dialog.getWindow().getDecorView())
.getChildAt(0).startAnimation(AnimationUtils.loadAnimation(
context,android.R.anim.slide_in_left));

4
বোধগম্য উত্তর নয়। কথোপকথনের অভ্যন্তরীণ দর্শনগুলি অ্যানিমেটেড হয়ে যায়
ডিজেফি

13

প্রথমে আপনাকে রেজ / আনিম দির দুটি অ্যানিমেশন সংস্থান তৈরি করতে হবে

slide_up.xML

<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
    android:duration="@android:integer/config_mediumAnimTime"
    android:fromYDelta="100%"
    android:interpolator="@android:anim/accelerate_interpolator"
    android:toXDelta="0">
</translate>
</set>

স্লাইড_বটম.এক্সএমএল

<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate 
    android:duration="@android:integer/config_mediumAnimTime" 
    android:fromYDelta="0%p" 
    android:interpolator="@android:anim/accelerate_interpolator" 
    android:toYDelta="100%p">
</translate>
</set>

তারপরে আপনাকে একটি স্টাইল তৈরি করতে হবে

<style name="DialogAnimation">
    <item name="android:windowEnterAnimation">@anim/slide_up</item>
    <item name="android:windowExitAnimation">@anim/slide_bottom</item>
</style>

এবং এই ক্লাসটি আপনার ক্লাসে যুক্ত করুন

dialog.getWindow().getAttributes().windowAnimations = R.style.DialogAnimation; //style id

HTTP- র ভিত্তিতে


রেফারেন্স ইউআরএল দরকারী!
আহেমেডেবিলিবিব

2

কোড নীচে চেষ্টা করুন:

public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

        getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));// set transparent in window background

        View _v = inflater.inflate(R.layout.some_you_layout, container, false);

        //load animation
        //Animation transition_in_view = AnimationUtils.loadAnimation(getContext(), android.R.anim.fade_in);// system animation appearance
        Animation transition_in_view = AnimationUtils.loadAnimation(getContext(), R.anim.customer_anim);//customer animation appearance

        _v.setAnimation( transition_in_view );
        _v.startAnimation( transition_in_view );
        //really beautiful
        return _v;

    }

কাস্টম আনিম তৈরি করুন: রেস / আনিম / গ্রাহক_নিম.এমএমএল:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">

    <translate
        android:duration="500"
        android:fromYDelta="100%"
        android:toYDelta="-7%"/>
    <translate
        android:duration="300"
        android:startOffset="500"
        android:toYDelta="7%" />
    <translate
        android:duration="200"
        android:startOffset="800"
        android:toYDelta="0%" />

</set>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.