কিভাবে ব্যাকস্ট্যাকে টুকরা অ্যানিমেশনগুলি বিপরীত করবেন?


114

আমি ভেবেছিলাম যখন নিম্নলিখিত কোডটি ব্যবহার করে টুকরো টুকরোটি ব্যবহার করার সময় পিছনের বোতামটি টিপানো হবে তখন সিস্টেমটি ব্যাকস্টকে অ্যানিমেশনগুলি বিপরীত করবে:

FragmentManager fm = getFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.setCustomAnimations(R.anim.slide_in, R.anim.hyperspace_out);
ft.replace(R.id.viewContainer, new class(), "layout").addToBackStack(null).commit();

উত্তর:


266

কাস্টম অ্যানিমেশনের জন্য অ্যান্ড্রয়েড ডকুমেন্টেশন অনুসারে :

পরিবর্তন:

ft.setCustomAnimations(R.anim.slide_in, R.anim.hyperspace_out);

প্রতি:

ft.setCustomAnimations(R.anim.slide_in, R.anim.hyperspace_out, R.anim.hyperspace_in, R.anim.slide_out );

এবং এখন ব্যাকস্ট্যাক অ্যানিমেটস - বিপরীতে!


2
বিটিডব্লিউ, আমি জানি এটি আপনার প্রশ্ন এবং উত্তরের সাথে সংযুক্ত নয়, তবে আপনি কি আমাকে এমন কিছুতে লিঙ্ক করতে পারেন যা কাস্টমঅ্যানিমেশনগুলি কিছুটা ব্যাখ্যা করে? : পি
আরিউসআস্টার্ট

2
আরিউস স্টার্টে: দেখুন ডেভেলপার.অ্যান্ড্রয়েড / রেফারেন্স / অ্যান্ড্রয়েড / অ্যাপ্লিকেশন , ইনট, ইনট, ইনট)
এমড্রয়েড

হাই আমি আসলে কনটেন্ট ট্রানজিশনটি ব্যবহার করছি, ঠিকঠাক কাজ করছি, কিন্তু যখন আমি পিছনে টিপুন এবং পূর্ববর্তী খণ্ডে যাই তখন ব্যাকগ্রাউন্ডটি কেবলমাত্র দৃষ্টিভঙ্গিগুলি অকার্যকর করে তোলে না বরং আক্রমণকারীদের সাথে ওভারলাইং করে, এড়াতে কোনও উপায়?
ব্যবহারকারী 3497504

23

সঠিক অ্যানিমেশনটি আমি নিম্নলিখিতটি ব্যবহার করেছি এবং এটি মনোযোগের মতো কাজ করে like

slide_in_left.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="@android:integer/config_mediumAnimTime" >
    <objectAnimator
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:duration="500"
        android:propertyName="x"
        android:valueFrom="1000"
        android:valueTo="0"
        android:valueType="floatType" />
</set>

slide_in_right.xml

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

    <objectAnimator
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:duration="500"
        android:propertyName="x"
        android:valueFrom="0"
        android:valueTo="1000"
        android:valueType="floatType" />

</set>

slide_out_left.xml

   <set xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="@android:integer/config_mediumAnimTime" >

    <objectAnimator
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:duration="500"
        android:propertyName="x"
        android:valueFrom="0"
        android:valueTo="-1000"
        android:valueType="floatType" />

</set>

slide_out_right.xml

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

    <objectAnimator
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:duration="500"
        android:propertyName="x"
        android:valueFrom="-1000"
        android:valueTo="0"
        android:valueType="floatType" />

</set>

তারপরে টুকরো যোগ করার সময় নিম্নলিখিত ব্যবহার করুন

setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_left,
                                R.anim.slide_out_right, R.anim.slide_in_right)

এবং এটি 100% কাজ করবে


2
নোট করুন আপনি সমর্থন ফ্রেগমেন্ট ম্যানেজার ব্যবহার করছেন বা যদি আপনার খণ্ডটি খণ্ডের সমর্থন সংস্করণটি প্রসারিত করে তবে এটি কাজ করবে না
w3bshark

@ w3bshark এই জাতীয় অ্যানিমেশনগুলি কীভাবে ব্যবহার FragmentManagerএবং Fragmentসমর্থন লাইব্রেরি থেকে কাজ করবেন ?
ড্যানিয়েল শ্যাটজ

2
পছন্দ করুন উদাহরণস্বরূপ, slide_in_left.xml হবে হতে: <translate android:fromXDelta="100%" android:startOffset="25" android:toXDelta="0" />: এই উত্তর দেখার stackoverflow.com/a/5151774/1738090
w3bshark

1
আমি এটি চেষ্টা করে যাচ্ছি (মার্শমেলো ডিভাইসে - অন্যান্য সংস্করণ ব্যবহার করে দেখিনি)। এটা কাজ করে না। চূড়ান্ত ফ্রেগমেন্ট ট্রান্সজিশন ফ্র্যাগমেন্টট্রান্সঅ্যাকশন = গিফফ্র্যাগমেন্টম্যানেজার ()। বিগ্রেট ট্রানজেকশন (); ফ্রেগমেন্ট ট্রানজিশন.সেট কাস্টম অ্যানিমেশনস (আর। ফ্রেগমেন্টট্রান্সঅ্যাকশন.রেপ্লেস (R.id.fl_right_container, বিস্তারিত ফ্রেমমেন্ট); খণ্ডিত ট্রানজেকশন.রেপ্লেস (R.id.fl_left_container, উপশ্রেণী বিভাগসমূহ ফ্রেমমেন্ট, টেস্টঅ্যাক্টিভিটি TAG TAG_SUBCATEGORIES_FRAGMENT); fragmentTransaction.commit ();
টেকটিঙ্কারার

13

আমার ক্ষেত্রে

fragmentTransaction.setCustomAnimations(android.R.anim.slide_in_left, android.R.anim.slide_out_right, 
                       R.anim.slide_in_right, R.anim.slide_out_left);

নিখুঁত অ্যানিমেশন তৈরি করতে হবে।

slide_in_right

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate android:fromXDelta="50%p" android:toXDelta="0"
               android:duration="@android:integer/config_mediumAnimTime"/>
    <alpha android:fromAlpha="0.0" android:toAlpha="1.0"
           android:duration="@android:integer/config_mediumAnimTime" />
</set>

slide_out_left

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate android:fromXDelta="0" android:toXDelta="-50%p"
               android:duration="@android:integer/config_mediumAnimTime"/>
    <alpha android:fromAlpha="1.0" android:toAlpha="0.0"
           android:duration="@android:integer/config_mediumAnimTime" />
</set>

1
আমি নিজেকে এটি করার কথা ভেবেছিলাম, তবে আমি খুব অলস। এবং আমি বলেছিলাম স্ট্যাকওভারফ্লোতে কারও এই পোস্ট করা উচিত এবং এটি এখানে! হা হা
এফ। মাইসির

1
এর আগে কেউ এটি পোস্ট করেনি এবং আমি যথেষ্ট বিশ্বাস করেছিলাম যে এই উত্তরটি পোস্ট করার পালা আমার সময়, যাতে আমার মতো জুতোতে কে থাকতে পারে ... LOL @ F.Mysir
Hoang Nguyen Huu

3
.setCustomAnimations(R.animator.fragment_fade_in,
        R.animator.fragment_fade_out,
        R.animator.fragment_fade_p_in,
        R.animator.fragment_fade_p_out)

উপরেরটি এর সাথে প্রতিস্থাপন করুন:

mFragmentManager.beginTransaction()
    .setCustomAnimations(R.animator.fragment_fade_in,
            R.animator.fragment_fade_out,
            R.animator.fragment_fade_p_in,
            R.animator.fragment_fade_p_out)
    .replace(R.id.main_container, FragmentPlayerInfo.getInstance(data))
    .addToBackStack(FragmentPlayerInfo.TAG)
    .commit();

1
আপনার প্রস্তাবটি কীভাবে সহায়তা করে তার একটি ব্যাখ্যা যুক্ত করার জন্য আমি আপনাকে সুপারিশ করব।
ওয়াটওয়ার

2
আমি জানি না কেন এটি কাজ করে (:, তবে যখন পরে এনিমেশন যুক্ত হয় replaceএবং কখন addToBackstackকাজ করা হয় না
তারিকডাব্লু

2
@ তারিকডাব্লু আমি কিছুটা দেরি করেছি, তবে এতে অর্ডারটি গুরুত্বপূর্ণ, আপনি প্রতিস্থাপনের আগে সেট কাস্টম অ্যানিমেশনগুলি কল করতে হবে, অ্যাডটোব্যাকস্ট্যাক পদ্ধতিগুলি
এমডি হুসাইনাইন তাহির

1

এটি ফ্র্যাগমেন্ট ট্রানজেকশন ক্লাসে উল্লেখ করা হয়েছে।

/**
     * Set specific animation resources to run for the fragments that are
     * entering and exiting in this transaction. The <code>popEnter</code>
     * and <code>popExit</code> animations will be played for enter/exit
     * operations specifically when popping the back stack.
     *
     * @param enter An animation or animator resource ID used for the enter animation on the
     *              view of the fragment being added or attached.
     * @param exit An animation or animator resource ID used for the exit animation on the
     *             view of the fragment being removed or detached.
     * @param popEnter An animation or animator resource ID used for the enter animation on the
     *                 view of the fragment being readded or reattached caused by
     *                 {@link FragmentManager#popBackStack()} or similar methods.
     * @param popExit An animation or animator resource ID used for the enter animation on the
     *                view of the fragment being removed or detached caused by
     *                {@link FragmentManager#popBackStack()} or similar methods.
     */
    @NonNull
    public abstract FragmentTransaction setCustomAnimations(@AnimatorRes @AnimRes int enter,
            @AnimatorRes @AnimRes int exit, @AnimatorRes @AnimRes int popEnter,
            @AnimatorRes @AnimRes int popExit);

সুতরাং অবশেষে আপনি এই জাতীয় পদ্ধতি ব্যবহার করতে পারেন

 mFragmentManager.beginTransaction()
                        .replace(R.id.container, fragment)
                        .setCustomAnimations(R.anim.slide_left,//enter
                                             R.anim.slide_out_left,//exit
                                             R.anim.slide_right,//popEnter
                                             R.anim.slide_out_right)//popExit
                        .addToBackStack(fragment.toString())
                        .commit();

0

আমার জন্য এই কাজ !! খণ্ডের জন্য এই কোড! আপনি যদি এই কোডটি ক্রিয়াকলাপে ব্যবহার করতে চান তবে শুরুতে মুছুন getActivity()!!

getActivity().getSupportFragmentManager()
        .beginTransaction()
        .setCustomAnimations(android.R.anim.slide_in_left, android.R.anim.fade_out,android.R.anim.slide_in_left, android.R.anim.fade_out)
        .replace(R.id.fragment_container, new YourFragment)
        .addToBackStack(null)
        .commit();

আপনাকে শুভকামনা !!

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