অ্যান্ড্রয়েড টুকরা এবং অ্যানিমেশন


265

আপনার কীভাবে স্লাইডিংয়ের ক্রমটি প্রয়োগ করা উচিত যা উদাহরণস্বরূপ হানিকম্ব জিমেইল ক্লায়েন্ট ব্যবহার করে?

টুকরো TransactionManagerযোগ করে এবং মুছে ফেলার মাধ্যমে এটি স্বয়ংক্রিয়ভাবে পরিচালনা করতে পারে, এমুলেটর স্লাইডশো হওয়ার কারণে এটি পরীক্ষা করা একরকম :)

উত্তর:


388

টুকরা মধ্যে রূপান্তরটি সজীব, অথবা দেখাচ্ছে বা একটি টুকরা আপনি ব্যবহার গোপন প্রক্রিয়া অ্যানিমেট করতে Fragment Managerএকটি তৈরি করতে Fragment Transaction

প্রতিটি খণ্ডের লেনদেনের মধ্যে আপনি এনিমেশনগুলি আউট এবং আউট নির্দিষ্ট করতে পারবেন যা যথাক্রমে শো এবং লুকানোর জন্য ব্যবহৃত হবে (বা উভয় প্রতিস্থাপন ব্যবহৃত হলে)।

নীচের কোডটি দেখায় যে কীভাবে আপনি কোনও খণ্ডকে স্লাইড করে এবং অন্যটিতে তার জায়গায় স্লাইড করে কোনও খণ্ডকে প্রতিস্থাপন করবেন।

FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_right);

DetailsFragment newFragment = DetailsFragment.newInstance();

ft.replace(R.id.details_fragment_container, newFragment, "detailFragment");

// Start the animated transition.
ft.commit();

গোপন বা একটি টুকরা আপনি কেবল কল চাই দেখানো হচ্ছে একই জিনিস অর্জন ft.showবা ft.hide, টুকরা কথা প্রসঙ্গে আপনি যথাক্রমে প্রদর্শন বা আড়াল করতে ইচ্ছুক।

রেফারেন্সের জন্য, এক্সএমএল অ্যানিমেশন সংজ্ঞাগুলি objectAnimatorট্যাগটি ব্যবহার করবে । স্লাইড_ইন_ বামের উদাহরণ এ জাতীয় দেখতে পারে:

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

57
যখন আমি এই চেষ্টা তা প্রদর্শন RuntimeException: অজানা অ্যানিমেটর নাম: অনুবাদ
লবি পানপুল্লান

3
পুরানো অ্যানিমেশন সংজ্ঞাের পরিবর্তে বস্তুঅ্যানিম্যাটর সংজ্ঞাগুলির একটি সেট ব্যবহার করে স্লাইড_ইন_ফিট এবং ডানে সংজ্ঞায়িত অ্যানিমেশনগুলি তৈরি করা হয়েছে তা নিশ্চিত করুন।
রেটো মেয়ার

7
যা অনেক সাহায্য করেছিল। আমি সঠিক পথে ছিলাম কিন্তু সেখানে পুরোপুরি পেলাম না। অন্যান্য পাঠকদের জন্য আপনার অ্যান্ড্রয়েড: ইন্টারপোলটার একটি বৈশিষ্ট্য হিসাবে থাকতে পারে, আপনার পছন্দের সাথে নির্দিষ্ট করা রয়েছে (যেমন "@ অ্যান্ড্রয়েড: ইন্টারপোলটার / লিনিয়ার")। এটি "@ অ্যান্ড্রয়েড: ইন্টারপোলটার / এক্সিলার_ডিলারেটর" -এ ডিফল্ট হয়।
ডেভ ম্যাকলিন

6
আমি সামঞ্জস্যতা API গুলি দিয়ে এপিআই স্তর 7 লক্ষ্য করছি target আমার জন্য কি টুকরোগুলি প্রাণবন্ত করার উপায় আছে?
জারোদ স্মিথ

5
@ জারোডস্মিথে আপনি মধুচক্র এপিআইকে ইক্লেয়ারে নামিয়ে আনার জন্য নাইনওল্ডঅ্যান্ড্রয়েডের মতো একটি সামঞ্জস্য লাইব্রেরি ব্যবহার করে দেখতে পারেন ।
মিঃ এস

249

যদি আপনাকে সমর্থন লাইব্রেরি ব্যবহার না করতে হয় তবে রোমানের উত্তরটি একবার দেখুন।

তবে আপনি যদি সমর্থন লাইব্রেরিটি ব্যবহার করতে চান তবে নীচের বর্ণিত হিসাবে আপনাকে পুরানো অ্যানিমেশন কাঠামোটি ব্যবহার করতে হবে।

পরামর্শ করার পর Reto এর এবং blindstuff এর উত্তর আমি নিম্নলিখিত কোড পরিশ্রমী অর্জিত হয়েছে।

টুকরা প্রদর্শিত ডান থেকে সহচরী এবং বাম আউট সহচরী যখন ফিরে টেপা হলে।

FragmentManager fragmentManager = getSupportFragmentManager();

FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction.setCustomAnimations(R.anim.enter, R.anim.exit, R.anim.pop_enter, R.anim.pop_exit);

CustomFragment newCustomFragment = CustomFragment.newInstance();
transaction.replace(R.id.fragment_container, newCustomFragment );
transaction.addToBackStack(null);
transaction.commit();

আদেশ গুরুত্বপূর্ণ। এর অর্থ আপনার অবশ্যই setCustomAnimations()আগে কল করতে হবে replace()বা অ্যানিমেশন কার্যকর হবে না!

এরপরে এই ফাইলগুলি রেজ / আনিম ফোল্ডারের ভিতরে রাখতে হবে ।

enter.xML :

<?xml version="1.0" encoding="utf-8"?>
<set>
    <translate xmlns:android="http://schemas.android.com/apk/res/android"
               android:fromXDelta="100%"
               android:toXDelta="0"
               android:interpolator="@android:anim/decelerate_interpolator"
               android:duration="@android:integer/config_mediumAnimTime"/>
</set>

প্রস্থান.এক্সএমএল :

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

pop_enter.xML :

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

pop_exit.xML :

<?xml version="1.0" encoding="utf-8"?>
<set>
    <translate xmlns:android="http://schemas.android.com/apk/res/android"
               android:fromXDelta="0"
               android:toXDelta="100%"
               android:interpolator="@android:anim/accelerate_interpolator"
               android:duration="@android:integer/config_mediumAnimTime"/>
</set>

অ্যানিমেশনগুলির সময়কাল কোনও ডিফল্ট মান @android:integer/config_shortAnimTimeবা অন্য কোনও সংখ্যায় পরিবর্তিত হতে পারে ।

নোট করুন যে খণ্ড প্রতিস্থাপনের মধ্যে যদি একটি কনফিগারেশন পরিবর্তন ঘটে (উদাহরণস্বরূপ রোটেশন) পিছনের ক্রিয়াটি অ্যানিমেটেড হয় না। এটি একটি ডকুমেন্টেড বাগ যা এখনও সমর্থন লাইব্রেরির রেভ 20 এ বিদ্যমান।


47
এটি আমাকে বাঁচিয়েছে। দ্রষ্টব্য, অর্ডারে মনোযোগ দিন গুরুত্বপূর্ণ , যা স্বাভাবিকভাবেই আমি প্রথমবার মিস করেছি missed এর অর্থ আপনাকে () প্রতিস্থাপনের আগে সেট কাস্টম অ্যানিমেশনস () অবশ্যই কল করতে হবে।
স্টিফেন কিডসন

3
আমি আমার টুকরো টুকরো টুকরোয় প্রয়োগ করার চেষ্টা করেছি you আপনার উল্লেখ অনুসারে আমি সমস্ত কিছু লিখেছি কিন্তু লগক্যাট বলেছেন: অজান্তে অ্যানিমেটার নাম অনুবাদ করুন আমি কীভাবে এই সমস্যাটি কাটিয়ে উঠতে পারি? যাইহোক আমি নেভিগেশন ড্রয়ারে আমার টুকরোটি কল করছি (স্লাইডিং মেনু)
জাফার সেলোগলু

দুর্দান্ত কাজ করে তবে দেখা যায় যে বিল্ড সরঞ্জামগুলির সাথে এটি নির্মাণ 21.1 "" অবৈধ ফাইলের নাম: কেবলমাত্র ছোট হাতের অক্ষর এবং সংখ্যা ([a-z0-9_।]) থাকতে হবে "বলে একটি ত্রুটি উত্পন্ন করে। আমি pop_enter.xml এবং pop_exit.xML এর উত্তরে ফাইলের নামগুলি সম্পাদনা করার পরামর্শ দিচ্ছি।
স্মিচাক

দুর্দান্ত সমাধান এবং আমি পিছনের বোতামটি টিপলে এটি দুর্দান্ত কাজ করে। আমার কেবল একটি প্রশ্ন আছে: আমি যদি একটি কাস্টম ব্যাকবটন তৈরি করতে চাই, তবে পিছনের বোতামটি থেকে আচরণটি প্রতিলিপি করার জন্য আমার কোন কোডটি কল করা উচিত?
টমাস টিলম্যান

1
.SetCustomAnimations (R.anim.pop_enter, R.anim.pop_exit, R.anim.enter, R.anim.exit): টমাস যদি তোমরা মুখ ফিরিয়ে করতে চাই, আপনি এই ফর্মটি বাস্তবায়িত করা উচিত
অ্যালেক্স Zaraos

26

আমি আপনাকে অ্যানিমেশন ফাইল তৈরির পরিবর্তে এটি ব্যবহার করার পরামর্শ দিচ্ছি কারণ এটি আরও অনেক ভাল সমাধান। অ্যান্ড্রয়েড স্টুডিও ইতিমধ্যে ডিফল্ট সরবরাহ করে animation আপনি কোনও নতুন এক্সএমএল ফাইল তৈরি না করেই ব্যবহার করতে পারবেন। অ্যানিমেশনগুলির নামগুলি android.R.anim.slide_in_left এবং android.R.anim.slide_out_right এবং আপনি সেগুলি নিম্নলিখিত হিসাবে ব্যবহার করতে পারেন:

ফ্রেগমেন্ট ট্রান্সজেকশন.সেট কাস্টম অ্যানিমেশন (android.R.anim.slide_in_left, android.R.anim.slide_out_right);

FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();              
fragmentTransaction.setCustomAnimations(android.R.anim.slide_in_left, android.R.anim.slide_out_right);
fragmentManager.addOnBackStackChangedListener(this);
fragmentTransaction.replace(R.id.frame, firstFragment, "h");
fragmentTransaction.addToBackStack("h");
fragmentTransaction.commit();

আউটপুট:

এখানে চিত্র বর্ণনা লিখুন


1
android.R ... "অ্যান্ড্রয়েড স্টুডিও ডিফল্ট অ্যানিমেশন সরবরাহ করে", এটি অ্যান্ড্রয়েড স্টুডিওর জন্য নয় যে এটি গ্রহনেও কাজ করতে পারে, অ্যান্ড্রয়েড.আর অ্যান্ড্রয়েড নির্দিষ্ট। android.R এ থাকা স্টাফ বিভিন্ন এপিএসে আলাদা different
স্টিভ মোরটজ

@ স্টেভমোর্টজ থেক্সস ভাই আমি আপনার বক্তব্যকে সম্মত করে দিয়েছি .. আমি আমার উত্তরটি সংশোধন করে আপডেট করব ...
গৌতম্যান এম

5

আমার পরিমার্জিত সমর্থন লাইব্রেরি ফ্র্যাগমেন্ট ট্রানজিশনের জন্য ভিউ অ্যানিমেশন (যেমন <translate>, <rotate>) এবং অবজেক্ট অ্যানিমেটারগুলি (যেমন ) উভয়ই সমর্থন করে <objectAnimator>। এটি দিয়ে বাস্তবায়ন করা হয় NineOldAndroids হয়েছে । বিশদ জন্য গিথুব আমার ডকুমেন্টেশন দেখুন।


2

আমার হিসাবে, আমার দৃষ্টিভঙ্গিটি প্রয়োজন:

in -> ডান থেকে সোয়াইপ করুন

আউট -> বাম দিকে সোয়াইপ করুন

এখানে আমার কোড কাজ করে:

slide_in_right.xml

<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

 <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>

লেনদেনের কোড:

inline fun FragmentActivity.setContentFragment(
        containerViewId: Int,
        backStack: Boolean = false,
        isAnimate: Boolean = false,
        f: () -> Fragment

): Fragment? {
    val manager = supportFragmentManager
    return f().apply {
        manager.beginTransaction().let {
            if (isAnimate)
                it.setCustomAnimations(R.anim.slide_in_right, R.anim.slide_out_left)

            if (backStack) {
                it.replace(containerViewId, this, "Fr").addToBackStack("Fr").commit()
            } else {
                it.replace(containerViewId, this, "Fr").commit()
            }
        }
    }
}

অ্যানড্রয়েড মনে হয় সেই অ্যানিমেশনগুলির সাথে রূপান্তরগুলি
ঝাঁকুনি দিচ্ছে

@ গ্যাব্রিয়েলডিলিভিরা রোডেন যেমনটা আমার পক্ষে সকল ক্ষেত্রেই নয়
সার্জ বুড়ালাকা

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