অ্যান্ড্রয়েডে ক্রিয়াকলাপ স্থানান্তর


188

অ্যান্ড্রয়েড 1.5 এবং এর পরে দুটি ক্রিয়াকলাপের মধ্যে রূপান্তরকে আমি কীভাবে সংজ্ঞায়িত করতে পারি? আমি কোনও ক্রিয়াকলাপ ম্লান করতে চাই।


7
overridePendingTransitionনীচে সমস্ত সম্পর্কিত উত্তরগুলির জন্য প্রযোজ্য: আপনি (0, 0)কোনও অ্যানিমেশন না চাইলে আপনি পাস করতে পারেন।
dokkaebi

উত্তর:


164

আপনি এটি দিয়ে এটি করতে পারেন Activity.overridePendingTransition()। আপনি একটি এক্সএমএল রিসোর্স ফাইলে সাধারণ স্থানান্তর অ্যানিমেশনগুলি সংজ্ঞায়িত করতে পারেন।


ধন্যবাদ আইয়ানডিসমে ওভাররাইডপেনজিং ট্রান্সশনটি এপিআই লেভেল 5.. স্তর 3 (অ্যান্ড্রয়েড 1.5) এর জন্য এটি করা সম্ভব নয় কি?
এইচপিফিক

আহ, আপনি ঠিক বলেছেন। কেসিবি এর উত্তর সম্ভবত আপনি যা খুঁজছেন তার ধারায় আরও বেশি।
iandisme

কেসিবির উত্তরের সাথে সঠিক বিবর্ণতা কীভাবে করা যায় তা এখনও খুঁজে পাইনি।
এইচপিমিক

1
আপনি আপনার কার্যকলাপের কার্যক্রমে এটি করতে পারেন onCreate
এমএক্সসিএল

1
এইচটিসিতে আপনাকে সেটিংস> প্রদর্শন> অ্যানিমেশনটি কাজ করার জন্য (বা কমপক্ষে এইচটিসি ডিজায়ার এইচডি তে) পরিবর্তন করতে হবে।
আরবস

191

দুটি ক্রিয়াকলাপের মধ্যে একটি সুন্দর মসৃণ বিবর্ণ করার কোডটি এখানে ..

নামক কোনো ফাইল তৈরি করুন fadein.xmlমধ্যেres/anim

<?xml version="1.0" encoding="utf-8"?>
<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="2000" />

নামক কোনো ফাইল তৈরি করুন fadeout.xmlমধ্যেres/anim

<?xml version="1.0" encoding="utf-8"?>

<alpha xmlns:android="http://schemas.android.com/apk/res/android"
   android:interpolator="@android:anim/accelerate_interpolator"
   android:fromAlpha="1.0" android:toAlpha="0.0" android:duration="2000" />

আপনি ক্রিয়াকলাপ এ থেকে ক্রিয়াকলাপ বি থেকে বিবর্ণ করতে চান , নিম্নোক্ত করা onCreate()জন্য পদ্ধতি ভ্রমণ বিsetContentView()আমার জন্য কাজ করার আগে ।

overridePendingTransition(R.anim.fadein, R.anim.fadeout);

যদি বিবর্ণগুলি আপনার জন্য খুব ধীর android:durationহয় তবে উপরের এক্সএমএল ফাইলগুলিকে আরও ছোট কিছুতে পরিবর্তন করুন ।


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

2
অন্যান্য থ্রেডের কোনও উত্তর নেই। আমি এটি মুছে ফেলছি। আমি যা অভিজ্ঞতা করছি তা হ'ল যা ঘটে তা হ'ল রূপান্তরটি তাত্ক্ষণিকভাবে ঘটে এবং পরে এটি অন্ধকার হয়ে যায় এবং ম্লান হয়ে যায় So সুতরাং আমি ক্রিয়াকলাপ এ এ থাকি এবং ক্রিয়াকলাপ বি প্রদর্শিত হয় তারপরে ম্লান হয়ে যায় এবং ম্লান হয়ে যায় I ক্রিয়াকলাপ A এর অনপজ () এ কোড যুক্ত করা এবং একই আচরণ পান।
গিগস অন হিগস

12
অ্যান্ড্রয়েড অ্যানিমেশনগুলিতে অন্তর্নির্মিত ব্যবহারটি একটি মসৃণ ট্রানজিশনের ফলে দেখা যাচ্ছে: overridePendingTransition(android.R.anim.fadein, android.R.anim.fadeout); এই ফাইলগুলি দেখার ফলে আপনার কাস্টম অ্যানিমেশনগুলিকে কীভাবে উন্নত করা যায় সে সম্পর্কে ইঙ্গিত দেওয়া যেতে পারে (যেমন বিবর্ণ হওয়ার চেয়ে দীর্ঘস্থায়ীভাবে বিবর্ণ করা)।
ড্যান জে

3
শুধু পরিবর্তন করতে ভুলে গেছি না fadeinএবং fadeoutকরতে fade_inএবং fade_out। ড্যান জে এর পোস্ট থেকে
ফরিদ

1
ডক্স অনুসারে, কল করার overridePendingTransition()পরে finish()এবং / অথবা আপনার ঠিক তখনই কল করা উচিত startActivity()। নতুন ক্রিয়াকলাপটি শুরু করার পরে ডেকে এনে আমি এইভাবে একটি সুন্দর বিবর্ণ পেতে সক্ষম হয়েছি।
আয়নোক্লাস্ট ব্রিগহাম

50

এটি করার একটি এমনকি সহজ উপায় হ'ল:

  1. আপনার স্টাইল.এক্সএমএল ফাইলটিতে একটি অ্যানিমেশন স্টাইল তৈরি করুন
<style name="WindowAnimationTransition">
    <item name="android:windowEnterAnimation">@android:anim/fade_in</item>
    <item name="android:windowExitAnimation">@android:anim/fade_out</item>
</style>
  1. আপনার অ্যাপ থিমে এই শৈলী যুক্ত করুন Add
<style name="AppBaseTheme" parent="Theme.Material.Light.DarkActionBar">
      <item name="android:windowAnimationStyle">@style/WindowAnimationTransition</item>
</style>

এটাই :)


31

হ্যাঁ. আপনার ক্রিয়াকলাপের জন্য আপনি কী ধরণের রূপান্তর করতে চান তা আপনি ওএসকে বলতে পারেন।

@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    getWindow().setWindowAnimations(ANIMATION);

    ...

}

যেখানে এনিমেশন হল একটি পূর্ণসংখ্যা যেখানে ওএস-এ অন্তর্নির্মিত অ্যানিমেশনটির উল্লেখ করে।


এটির কাজ করার জন্য আমাকে কি অন্য কিছু করতে হবে? getWindow ()। setWindowAnimations (android.R.anim.fade_in) এর ফলে ডিফল্টরূপে ব্যবহৃত ধাক্কা উত্তরণের ফলাফল হয় না, তবে এটি কোনও বিবর্ণ রূপান্তরও নয়। নতুন ক্রিয়াকলাপটি কেবলমাত্র একটি নেক্সাস ওয়ান ডিভাইসে আগেরটির তুলনায় প্রদর্শিত হবে।
এইচপিক

1
এর কারণ এটি কোনও সংস্থার জন্য জিজ্ঞাসা করছে না, এটি ওএস-এ নির্মিত ট্রানজিশন অ্যানিমেশনের আইডি চাইছে। বিকাশকারী.অ্যান্ড্রয়েড.
com

4
মনে হচ্ছে সেট উইন্ডো অ্যানিমেশনগুলি কেবল স্টাইলের সংস্থান গ্রহণ করে। getWindow ()। setWindowAnimations (android.R.style.Animation_Toast) আমার কাছে ম্লান হওয়ার সবচেয়ে কাছের, তবে এটি পূর্বের ক্রিয়াকলাপ নয়, কালো থেকে বিবর্ণ।
এইচপিমিক

1
এটি ওএসে অ্যানিমেশনে তৈরি করতে হবে না, আপনি মানগুলিতে একটি কাস্টমকে নির্দিষ্ট করতে পারেন।
ilija139

1
@ ilija139, আপনি কি নিশ্চিত? এটি এখানে বিকাশকারী.অ্যান্ড্রয়েড.com / references / android / view /… বলেছে : "এটি অবশ্যই একটি সিস্টেম সংস্থান হতে হবে; এটি অ্যাপ্লিকেশন সংস্থান হতে পারে না কারণ উইন্ডো ম্যানেজারের অ্যাপ্লিকেশনগুলিতে অ্যাক্সেস নেই" "
lapis

29

res> anim> fadein.xML তৈরি করুন

<?xml version="1.0" encoding="utf-8"?>
    <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" />

res> anim> fadeout.xML তৈরি করুন

<?xml version="1.0" encoding="utf-8"?>
    <alpha xmlns:android="http://schemas.android.com/apk/res/android"
       android:interpolator="@android:anim/accelerate_interpolator"
       android:fromAlpha="1.0" android:toAlpha="0.0" android:duration="500" />

পুনরায়> মান> শৈলী.এক্সএমএল এ

<style name="Fade">
        <item name="android:windowEnterAnimation">@anim/fadein</item>
        <item name="android:windowExitAnimation">@anim/fadeout</item>
    </style>

ক্রিয়েট () উপর ক্রিয়াকলাপে

getWindow().getAttributes().windowAnimations = R.style.Fade;

2
আমি এটি কোনও থিমে যুক্ত করার পরামর্শ দেব যাতে এটি সমস্ত ক্রিয়াকলাপে প্রয়োগ হয়?
পিটারডকে

12
এই অ্যানিমেশনগুলি ইতিমধ্যে অ্যান্ড্রয়েডে সংজ্ঞায়িত করা হয়েছে, কেবলমাত্র সমস্ত ক্রিয়াকলাপের (পজ) এর জন্য নিম্নলিখিত কোডটি যুক্ত করুন:overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
এলাদ নাভা

হ্যাঁ, কেবল এটি দেখাতে চেয়েছিলেন যে অ্যানিমেশনটি বিকাশকারীদের পছন্দ অনুসারে সম্পাদনা করা যেতে পারে।
আইসস্টেভ

29

ডিফল্ট অ্যানিমেশনগুলির তালিকার জন্য দেখুন: http://developer.android.com/references/android/R.anim.html

প্রকৃতপক্ষে fade_inএবং fade_outএপিআই স্তরের 1 এবং উপরে রয়েছে।


2
যেমন getWindow ()। setWindowAnimations (android.R.anim.slide_in_left);
পিয়েরে

5
চিয়ার্স, এগুলি খুঁজে পেতে আমাকে আশ্চর্যজনকভাবে দীর্ঘ সময় ধরে গুগলিং করেছে।
জর্জিকিসি

25

আমি আমার ডিফল্ট ক্রিয়াকলাপ অ্যানিমেশনটি ওভাররাইট করি। আমি এপিআই 15 এ এটি পরীক্ষা করে দেখছি যে এটি সহজে কাজ করে। আমি যে সমাধানটি ব্যবহার করি তা এখানে:

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorPrimary</item>
    <item name="android:windowAnimationStyle">@style/CustomActivityAnimation</item>

</style>

<style name="CustomActivityAnimation" parent="@android:style/Animation.Activity">
    <item name="android:activityOpenEnterAnimation">@anim/slide_in_right</item>
    <item name="android:activityOpenExitAnimation">@anim/slide_out_left</item>
    <item name="android:activityCloseEnterAnimation">@anim/slide_in_left</item>
    <item name="android:activityCloseExitAnimation">@anim/slide_out_right</item>
</style>

রেজ ফোল্ডারের অধীনে আনিম ফোল্ডার তৈরি করুন এবং তারপরে এই চারটি অ্যানিমেশন ফাইল তৈরি করুন:

slide_in_right.xml

<?xml version="1.0" encoding="utf-8"?>

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

slide_out_left.xml

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

slide_in_left.xml

<?xml version="1.0" encoding="utf-8"?>

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

slide_out_right.xml

<?xml version="1.0" encoding="utf-8"?>

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

আপনি আমার নমুনা প্রকল্পটি ডাউনলোড করতে পারেন ।

এখানেই শেষ... :)


এটি স্বীকৃত উত্তর হওয়া উচিত। ভাল কাজ করে!
এজডেভ

24

দুটি ক্রিয়াকলাপের মধ্যে সুন্দর মসৃণ করার কোড এখানে।

  1. বাম থেকে ডানে মসৃণ প্রভাব

    স্লাইড_আইন_রাইট.এক্সএমএল এবং স্লাইড_আউট_রাইট.এক্সএমএল নামে একটি ফাইল তৈরি করুন

    slide_in_right.xml

        <?xml version="1.0" encoding="utf-8"?>
        <set xmlns:android="http://schemas.android.com/apk/res/android"
            android:shareInterpolator="false" >
            <translate android:duration="5000" android:fromXDelta="100%" android:toXDelta="0%" />
            <alpha android:duration="5000" android:fromAlpha="0.0" android:toAlpha="1.0" />
        </set>

    slide_out_right.xml

    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android"
        android:shareInterpolator="false" >
        <translate android:duration="5000" android:fromXDelta="0%" android:toXDelta="-100%"/>
        <alpha android:duration="5000" android:fromAlpha="1.0" android:toAlpha="0.0" />
    </set>
  2. ডান থেকে বাম মসৃণ প্রভাব

    অ্যানিমেশন_নেটার.এক্সএমএল এবং অ্যানিমেশন_লিভ.এক্সএমএল নামে একটি ফাইল তৈরি করুন

    animation_enter.xml

       <set xmlns:android="http://schemas.android.com/apk/res/android"
        android:shareInterpolator="false">
        <translate android:fromXDelta="-100%" android:toXDelta="0%"
            android:fromYDelta="0%" android:toYDelta="0%"
            android:duration="700"/>
       </set>

    animation_leave.xml

      <set xmlns:android="http://schemas.android.com/apk/res/android"
        android:shareInterpolator="false">
        <translate
            android:fromXDelta="0%" android:toXDelta="100%"
            android:fromYDelta="0%" android:toYDelta="0%"
            android:duration="700" />
      </set>
  3. এক ক্রিয়াকলাপ থেকে দ্বিতীয় ক্রিয়াকলাপে নেভিগেট করুন

       Intent intent_next=new Intent(One_Activity.this,Second_Activity.class);
       overridePendingTransition(R.anim.slide_in_right,R.anim.slide_out_right);
       startActivity(intent_next);
     finish();

    4. ইভেন্ট ইভেন্টের পিছনে বা দ্বিতীয় ক্রিয়াকলাপ থেকে একটি ক্রিয়াকলাপে নেভিগেট করুন

     Intent home_intent = new Intent(Second_Activity.this, One_Activity.class);
     overridePendingTransition(R.anim.animation_enter, R.anim.animation_leave);
     startActivity(home_intent);
     finish();

3
ওভাররাইডপেন্ডিং
ট্রান্সশিশনটি

ওভাররাইড পেডিং ট্রান্সশনিশনটি 3 এবং 4
তারেক

ওভাররাইড পেমেন্ট ট্রান্সশন () যদি স্টার্টএটিভিটি () এর আগে রাখে
ফার্নান্দো টান

কল করা উচিত overridePendingTransitionঅবিলম্বে পরে : startActivity developer.android.com/reference/android/app/...
Midhun এমপি

4

আপনি অ্যান্ড্রয়েড 1.5 তে ওভাররাইডপেন্ডিং ট্রান্সশন ব্যবহার করতে পারবেন না। ওভাররাইডপেন্ডিং ট্রান্সসিশন অ্যান্ড্রয়েড ২.০ এ এসেছিল।

আপনি যদি কোনও ত্রুটি ছাড়াই এটি করতে যাচ্ছেন তবে সাধারণ অ্যানিমেশনগুলি (বা আপনার নিজের) ব্যবহার করে আপনার লক্ষ্য (1.5 বা উচ্চতর) জন্য সঙ্কলন করতে হবে বা ওভাররাইডপেন্ডিং ট্রান্সসিশন ব্যবহার করে লক্ষ্য (২.০ বা উচ্চতর) জন্য আপনাকে সংকলন করতে হবে।

সংক্ষিপ্তসার: আপনি অ্যান্ড্রয়েড 1.5 তে ওভাররাইডপেন্ডিং ট্রান্সসিশন ব্যবহার করতে পারবেন না

আপনি যদিও ওএস-এ বিল্ট-ইন অ্যানিমেশনগুলি ব্যবহার করতে পারেন।


এটি সঠিক নয়। অ্যানিমেশনগুলি 1.6 এর আগে অ্যান্ড্রয়েডে ভাল রয়েছে এবং আপনি 1.5 কে লক্ষ্য করে এখনও প্রতিচ্ছবি সহ ওভাররাইডপেন্ডিং ট্রান্সসিশন ব্যবহার করতে পারেন।
এইচপিক

ঠিক আছে, আমার ভুল। আমার পোস্ট আপডেট। আপনি অবশ্যই নিজের অ্যানিমেশনগুলি করতে এবং সেগুলিকে নিজের পছন্দ অনুসারে 1.5 করতে পারেন। কিন্তু আপনি এখনও overridePendingTransition ব্যবহার করতে পারবেন না যেহেতু এটি 5. এপিআই-স্তরের প্রদর্শিত করতে শুরু
কার্টেন

2

গ্যালাক্সি ডিভাইসে:

আপনাকে সেটিংস> বিকাশকারী বিকল্পগুলি ব্যবহার করে ডিভাইসে এটি বন্ধ করা হয়নি তা নিশ্চিত করতে হবে need

দুটি মুপেট


এমনকি এলজি ডিভাইসের জন্যও :)
Ultimo_m

আমারও তাই মনে হয়, তবে আমি এটি চেষ্টা করব না
মেহের ইসমাইল

ফ্যান্টাস্টিক! ট্রানজিশন এবং অ্যানিমেশন অনুসন্ধানের কয়েক ঘন্টা পরে আমি আপনার উত্তরটি পেয়েছি।
কুলমাইন্ড

1

ActivityCompat.startActivity () ওয়ার্কস API> 21 ব্যবহার করুন।

    ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(activity, transitionImage, EXTRA_IMAGE);
    ActivityCompat.startActivity(activity, intent, options.toBundle());

1

আপনার উদ্দেশ্য শুরু করার আগে:

ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(AlbumListActivity.this);
startActivity(intent, options.toBundle());

এটি আপনার ক্রিয়াকলাপ স্থানান্তরকে ডিফল্ট অ্যানিমেশন দেয়।


0

অ্যান্ড্রয়েডের কিছু সংস্করণ কাস্টম Activityট্রানজিশনগুলিকে সমর্থন করে এবং কিছুগুলি (পুরানো ডিভাইস) সমর্থন করে না। আপনি যদি কাস্টম ট্রানজিশনগুলি ব্যবহার করতে চান তবে পুরানো সংস্করণ Activityঅনুসারে overridePendingTransition()পদ্ধতিটি আছে কিনা তা যাচাই করা ভাল অনুশীলন ।

পদ্ধতিটি বিদ্যমান কিনা তা জানতে, প্রতিচ্ছবি এপিআই ব্যবহার করা যেতে পারে। এখানে একটি সহজ কোড যা পদ্ধতিটি উপস্থিত থাকলে তা পরীক্ষা করে ফিরে আসবে:

Method mOverridePendingTransition;

try {
        mOverridePendingTransition = Activity.class.getMethod(
                "overridePendingTransition", new Class[] { Integer.TYPE, Integer.TYPE } );
        /* success */
    } catch (NoSuchMethodException nsme) {
        /* failure, this version of Android doesn't have this method */
    } 

এবং তারপরে, আমরা আমাদের নিজস্ব ট্রানজিশন প্রয়োগ করতে পারি, অর্থাত্ যদি বিদ্যমান থাকে তবে এই পদ্ধতিটি ব্যবহার করুন:

if (UIConstants.mOverridePendingTransition != null) {
               try {
                   UIConstants.mOverridePendingTransition.invoke(MainActivity.this, R.anim.activity_fade_in, R.anim.activity_fade_out);
               } catch (InvocationTargetException e) {
                   e.printStackTrace();
               } catch (IllegalAccessException e) {
                   e.printStackTrace();
               }
            }

এখানে, উদাহরণ হিসাবে, সরল ফেড-ইন এবং ফেড-আউট অ্যানিমেশনগুলি রূপান্তর প্রদর্শনের জন্য ব্যবহৃত হয়েছিল ..


0

জুম আউট অ্যানিমেশন

Intent i = new Intent(getApplicationContext(), LoginActivity.class);
 overridePendingTransition(R.anim.zoom_enter, R.anim.zoom_exit);
startActivity(i);
finish();

zoom_enter

<?xml version="1.0" encoding="utf-8"?>
<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" />

zoom_exit

<alpha xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/accelerate_interpolator"
    android:fromAlpha="1.0" android:toAlpha="0.0"
    android:fillAfter="true"
    android:duration="500" />
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.