নতুন ক্রিয়াকলাপ চালু করার সময় অ্যাক্টিভিটি স্লাইড-ইন অ্যানিমেশনটি অক্ষম করবেন?


140

আমার একটি ক্রিয়াকলাপ যা একটি বাটন ক্লিকের মাধ্যমে অন্য ক্রিয়াকলাপ শুরু করে। ডিফল্টরূপে, অ্যান্ড্রয়েডের নতুন ওএস সংস্করণগুলিতে, ওএস ডান থেকে বামে স্লাইড করে নতুন ক্রিয়াকলাপটিকে অ্যানিমেটেড করবে।

এই অ্যানিমেশনটি অক্ষম করার কোনও উপায় আছে? আমি চাই যে নতুন ক্রিয়াকলাপটি কোনও প্রকার অ্যানিমেশন ছাড়াই প্রদর্শিত হবে।

উত্তর:


190

FLAG_ACTIVITY_NO_ANIMATIONপতাকা অ্যানিমেশন নিষ্ক্রিয় যখন কার্যক্রম শুরু করার জন্য কাজ করে জরিমানা।

finish()কোনও ক্রিয়াকলাপে কল করার সময় ট্রিগার হওয়া অনুরূপ অ্যানিমেশনটি অক্ষম করতে , অ্যানিমেশনটি ডান থেকে বাম পরিবর্তে স্লাইডগুলির পরিবর্তে, আপনি কল করার overridePendingTransition(0, 0)পরে কল করতে পারেন finish()এবং পরবর্তী অ্যানিমেশনটি বাদ দেওয়া হবে।

আপনি কল করার overridePendingTransition(0, 0)পরে কল করলে এটি ইন-অ্যানিমেশনটিতেও কাজ করে startActivity(...)


9
নোট করুন FLAG_ACTIVITY_NO_ANIMATIONএবং overridePendingTransitionউভয়ই এপিআই স্তর 5+ রয়েছে।
আজদেব

পিছনের কী টিপে কোনও ক্রিয়াকলাপ থেকে ফিরে যাওয়ার ক্ষেত্রে এটি কোনও সহায়তা করে না।
ইয়ার

4
তুমিই শ্রেষ্ঠ. ওভাররাইডপেন্ডিং ট্রান্সশন (0, 0) -> godশ্বরের মত is এটি কেবল ফিনিস () অ্যানিমেশনটিকে ওভাররাইড করে, তবে পূর্ববর্তী ক্রিয়াকলাপটি পুনরায় শুরু করার সময় ট্রিগার হওয়া অ্যানিমেশনটি নয়।
ফিলিপ জাহোদা

1
আমি এই উত্তরটি অপছন্দ করি কারণ এটি 'পিছনে' সফটকিগুলি টিপানোর ফলে সংক্রমণগুলি কভার করে না।
ওপিতে

3
আপনি যদি "ব্যাক" অ্যানিমেশনটি অক্ষম বা ওভাররাইড করতে চান তবে আপনার ক্রিয়াকলাপে ফিনিস () পদ্ধতিটি ওভাররাইড করুন এবং সেই কলটি সেখানে সুপার.ফিনিশ () এ কল করুন। সমস্যা সমাধান.
গ্রিশকা

171

এই উত্তরটি এখানে IMHO করুন সবচেয়ে মার্জিত উপায়ে সমস্যাটি সমাধান করুন ..

বিকাশকারী একটি স্টাইল তৈরি করা উচিত ,

<style name="noAnimTheme" parent="android:Theme">
  <item name="android:windowAnimationStyle">@null</item>
</style>

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

<activity android:name=".ui.ArticlesActivity" android:theme="@style/noAnimTheme">
</activity>

ভাল খবর! সুন্দর এবং সহজ..

আসল লেখকের কাছে পিএস ক্রেডিট দয়া করে ..


1
এটি পিছনে কাজ করে না, এবং এটি শিরোনাম বারের চেহারা পরিবর্তন করে (এটি এটি ছোট করে তোলে) ...
মেরেক

আপনি কি নিশ্চিত যে আপনি শৈলীতে কিছু অন্যান্য বৈশিষ্ট্য যুক্ত করেন নি, কারণ কারও জন্যই এই "প্রভাব" এর কথা আপনি উল্লেখ করেন নি ..
Ewoks

কেবলমাত্র রেফারেন্সের জন্য, এটি এমন ভিউ হায়ারার্কিতে একটি সমস্যা তৈরি করতে পারে যেখানে আপনাকে উইন্ডো ফিচার () এর জন্য অনুরোধ করতে হবে।
মার্টিন মার্কনকিনি

আপনি যদি কিছুটা বিশদভাবে বর্ণনা করেন তবে চমৎকার হবে, তাই আমরা সম্ভাব্য সমস্যাগুলি এড়াতে পারি
ইওকস

4
@ মারেক আমার ধারণা আপনার সমস্যাটি প্যারেন্ট = "অ্যান্ড্রয়েড: থিম "টি সঠিকভাবে পরিবর্তন করছে না। আপনি যে থিমটি ব্যবহার করতে চান তা দিয়ে এটি পরিবর্তন করা উচিত, মূলত এই কোডটি কেবল একটি থিমের নির্দিষ্ট অ্যানিমেশনটি অক্ষম করে। উদাহরণস্বরূপ "Android: থিম" এর পরিবর্তে "থিম.অ্যাপকম্প্যাট.লাইট.নো অ্যাকশনবার" ব্যবহার করুন এবং আপনি যা বলতে চাইছেন তা পেয়ে যাবেন। আমি আসা করি এটা সাহায্য করবে.
রিকোমার

33

প্রয়োগ করা

startActivity(new Intent(FirstActivity.this,SecondActivity.class));

তারপর

overridePendingTransition(0, 0);

এটি অ্যানিমেশন বন্ধ করবে।


28

আমার মতে সবচেয়ে ভাল উত্তরটি ব্যবহার করা "overridePendingTransition(0, 0);"

আপনি যখন Intentকোনও Activityব্যবহার করতে চান তখন অ্যানিমেশনটি এড়াতে :

this.startActivity(new Intent(v.getContext(), newactivity.class));
this.overridePendingTransition(0, 0);

এবং অ্যানিমেশনটি দেখতে না পারা যখন আপনি নিজের বোতামে ওভাররাইড onPauseপদ্ধতিটি পিছনে টিপুনnewactivity

@Override
protected void onPause() {
    super.onPause();
    overridePendingTransition(0, 0);
}


13

ক্রিয়াকলাপ অ্যানিমেশন অক্ষম করার সময় এটি আমার পক্ষে কাজ করে।

@Override
protected void onPause() {
    super.onPause();
    overridePendingTransition(0, 0);
}

9

আমি ৪.৪.২ এ আছি এবং প্রবর্তন ক্রিয়াকলাপের অনক্রিট () তে ওভাররাইডপেন্ডিং ট্রান্সিশন (0, 0) কল করা প্রারম্ভিক অ্যানিমেশনটি নিষ্ক্রিয় করবে (ওভাররাইডপেন্ডিং ট্রান্সজিশন (0, 0) কল করার পরে অবিলম্বে কার্যকলাপ () কাজ করেনি)। অন্য উত্তরে যেমন উল্লেখ করা হয়েছে, সমাপ্তির পরে ওভাররাইডপেন্ডিং ট্রান্সশিশন (0, 0) কল করা () ক্লোজিং অ্যানিমেশনটি অক্ষম করে।

বিটিডব্লু, আমি দেখতে পেলাম যে "অ্যান্ড্রয়েড: উইন্ডোঅ্যানিমেশনস্টাইল"> @ নাল দিয়ে শৈলীটি সেট করা (আমার এখানে উল্লিখিত অন্য একটি উত্তর) ক্র্যাশ ঘটায় যখন আমার প্রবর্তন ক্রিয়াকলাপটি অ্যাকশন বারের শিরোনাম সেট করার চেষ্টা করেছিল। আরও ডিবাগিং করে, আমি আবিষ্কার করেছি যে এটির কারণে কোনওভাবে ক্রিয়াকলাপের ইনিঅ্যাকশনবার () এর উইন্ডোটি ফিচার (উইন্ডো.ফিয়ার্যাট_আ্যাকশন_বার) ব্যর্থ হয়।


1
অন্রেসিউম কি? একক শীর্ষ কার্যক্রম এবং সমস্ত।
লাসি কিনুনেনেন

7

FLAG_ACTIVITY_NO_ANIMATION কাজ করতে পারে তবে FLAG_ACTIVITY_CLEAR_TASK এবং FLAG_ACTIVITY_NEW_TASK এর সাথে একত্রিত হয়ে আমার পক্ষে কৌতুকটি করছিল না। আমি দৃশ্যত আমার অন্যান্য শীর্ষ-স্তরের মতামত নেভিগেট করার সাথে সাথে একটি নতুন কার্যকলাপ স্ট্যাকের সাথে একটি নতুন টাস্ক তৈরির জন্য অ্যানিমেশনটি দৃশ্যত দেখছি।

এখানে কী কাজ করছিল তাকে "ওভাররাইডপেন্ডিং ট্রান্সশিশন (0, 0) বলছিল;" হয় আমার স্টার্টএটিভিটি () কল বা অনপেজ () এর সাথে সাথেই। উভয় উপায়েই কাজ করেছে, তবে স্টার্টঅ্যাক্টিভিটি () এর পরে এটি করা কখন আমি অ্যানিমেশন চাই এবং কখন না করি তার উপর আমাকে আরও কিছুটা নিয়ন্ত্রণ দেয়।


2

একটি কালো পর্দা ব্যবহার করে একটি ক্রিয়াকলাপ থেকে অন্য ক্রিয়াকলাপে স্লাইডিং ট্রানজিশনের উপর উপস্থিত হওয়ার একই সমস্যা ছিল overridependingtransition। এবং আমি নীচের পথে অনুসরণ করেছি এবং এটি কাজ করেছে

1) noanim.xmlanim ফোল্ডারে একটি তৈরি করেছে

<?xml version="1.0" encoding="utf-8"?>
<translate 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="@android:integer/config_longAnimTime"
    android:fromYDelta="0%p"
    android:toYDelta="0%p" />

এবং ব্যবহৃত

overridePendingTransition(R.drawable.lefttorightanim, R.anim.noanim);

আমার আসল অ্যানিমেশন হিসাবে প্রথম পরামিতি এবং দ্বিতীয় পরামিতি যা আমার ডামি অ্যানিমেশন হিসাবে প্রস্থান অ্যানিমেশন


1

ইতিমধ্যে স্ট্যাকের মধ্যে কোনও ক্রিয়াকলাপ শুরু করার সময় কালো পটভূমি এড়াতে, আমি যুক্ত করেছি overridePendingTransition(0,0) মধ্যে onStart():

@Override
protected void onStart() {
    overridePendingTransition(0,0);
    super.onStart();

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