জাভাতে ফেড আউট অ্যান্ড্রয়েড অ্যানিমেশন


148

আমি একটি চিত্রভিউয়ের 2 সেকেন্ড অ্যানিমেশন রাখতে চাই যা 1000 মিমি ম্লান হয়ে যায় এবং তারপরে 1000 মিমি ম্লান হয়ে যায়।

আমার এমেজভিউ কনস্ট্রাক্টরে আমার এখন পর্যন্ত যা আছে তা এখানে:

Animation fadeIn = new AlphaAnimation(0, 1);
fadeIn.setDuration(1000);

Animation fadeOut = new AlphaAnimation(1, 0);
fadeOut.setStartOffset(1000);
fadeOut.setDuration(1000);

AnimationSet animation = new AnimationSet(true);
animation.addAnimation(fadeIn);
animation.addAnimation(fadeOut);
this.setAnimation(animation);

আমি যখন সেই অ্যানিমেশনটি চালিত করি তখন কিছুই প্রদর্শিত হয় না। যাইহোক, আমি যখন আলফা অ্যানিমেশনগুলির একটি অপসারণ করি তখন আচরণটি প্রত্যাশার মতো কাজ করে।

আমি ইতিমধ্যে যে জিনিসগুলি চেষ্টা করেছি:

  • প্রতিটি অনুমেয় সমন্বয় setFillBefore, setFillAfterএবং setFillEnabled
  • একটি যোগ করার পদ্ধতি LinearInterpolatorথেকে AnimationSet

1
হ্যাঁ আপনি ছবিগুলি ভিতরে এবং বাইরে বিবর্ণ করতে পারেন! এই টিউটোরিয়ালটি কৌশলটি করা উচিত। sankarganesh-info-exchange.blogspot.com/2011/04/…
অ্যাডাম ঝড়

এই টিউটোরিয়ালটি XML ব্যবহার করে একটি পদ্ধতি বর্ণনা করে। আপনি কি জাভা ব্যবহার করে একই জিনিস অর্জন করতে জানেন?
লাঙল

ঠিক আছে, আমি আমার প্রোগ্রামিং কম্পিউটারের পাশে নেই তাই আমি এই কোডটি পরীক্ষা করতে পারছি না, তবে আপনি জাভাতে এক্সএমএল বৈশিষ্ট্যগুলি সেট করতে পারেন। এটিই মূল কোড: অ্যান্ড্রয়েড: ইন্টারপোল্টর = "@ অ্যান্ড্রয়েড: অ্যানিম / ত্বরণ_আপনার" (300) মাইটাইউন.ফর্মআল্ফা (0.0) মাইটিউইন (1.0)
অ্যাডাম ঝড়

উত্তর:


258

আমার নিজের সমস্যাটি বের করলেন। সমাধানটি ইন্টারপোলটারে ভিত্তি করে শেষ হয়েছিল।

Animation fadeIn = new AlphaAnimation(0, 1);
fadeIn.setInterpolator(new DecelerateInterpolator()); //add this
fadeIn.setDuration(1000);

Animation fadeOut = new AlphaAnimation(1, 0);
fadeOut.setInterpolator(new AccelerateInterpolator()); //and this
fadeOut.setStartOffset(1000);
fadeOut.setDuration(1000);

AnimationSet animation = new AnimationSet(false); //change to false
animation.addAnimation(fadeIn);
animation.addAnimation(fadeOut);
this.setAnimation(animation);


আপনি যদি কোটলিন ব্যবহার করেন

val fadeIn = AlphaAnimation(0f, 1f)
fadeIn.interpolator = DecelerateInterpolator() //add this
fadeIn.duration = 1000

val fadeOut = AlphaAnimation(1f, 0f)
fadeOut.interpolator = AccelerateInterpolator() //and this
fadeOut.startOffset = 1000
fadeOut.duration = 1000

val animation = AnimationSet(false) //change to false
animation.addAnimation(fadeIn)
animation.addAnimation(fadeOut)
this.setAnimation(animation)

1
আপনি যদি প্রতিটির জন্য 100 টির মতো ছোট্ট বিলম্ব সহ 5 বা 6 টি ফিডিং / আউট করতে চান তবে আপনি কি এই জাতীয় কিছু ব্যবহার করতে পারেন? আমি চেষ্টা করেছিলাম কিন্তু এটি আসলে তরল নয়। উদ্দেশ্য ছিল উদাহরণস্বরূপ এমন একটি বাল্ব সিমুলেট করা যা সঠিকভাবে কাজ করবে না এবং পলক।
ছাই

চেষ্টা করুন এবং এটিকে সেট করুন setঅ্যানিমেশনটি একটি লুপ
জোনাথন

আমি ভাবছিলাম আমি বর্তমান বিগিতে সর্বশেষ বিজি ইমগ এবং বিবর্ণ বিবর্ণ করবো, তবে এই উত্তরটি আমাকে অনুপ্রাণিত করে যে আমাকে কেবলমাত্র বর্তমান বিজি ইমগিতে বিবর্ণ হওয়া এবং বর্তমানের বিবর্ণ হওয়া দরকার, কারণ আলফাএনিমেশনটি দুটি পৃথক ইমগকে বিবর্ণ করতে পারে না / আউট করতে পারে না ।
macio.Jun

8
আমার মনে হয় না যে আপনার দুটি স্বতন্ত্র অ্যানিমেশন থাকা দরকার ... আমি মনে করি আপনার কাছে একটি একক অ্যানিমেশন থাকতে পারে এবং প্যারামিটারটি সেট করা যেতে পারে: fadeInOut.setRepeatMode (অ্যানিমেশন.আরভারসী);
রাউন্ডস্প্যারো হিলিটেক্স

দ্বিতীয়: আপনি যদি পুনরাবৃত্তি করতে চান, @ জোনির মতো লুপে কল করার দরকার নেই। fadeInOut.setRepeatCount (6) ব্যবহার করুন - আপনি এটির পুনরাবৃত্তি করতে চান এমন কতটি হতে 6 টি পরিবর্তন করুন। অ্যানড্রয়েডের নেটিভ সি ++ কোডটিকে জাভা লুপে কল করার পরিবর্তে এগুলি করতে দেওয়ার জন্য খুব কম ওভারহেড।
রাউন্ডস্প্যারো হিলিটেক্স

137

আমি জানি যে এটি ইতিমধ্যে উত্তর দেওয়া হয়েছে কিন্তু .....

<?xml version="1.0" encoding="utf-8"?> 
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromAlpha="1.0" 
    android:toAlpha="0.0" 
    android:duration="1000"    
    android:repeatCount="infinite" 
    android:repeatMode="reverse"
    />

স্ব-পুনরাবৃত্তি সহ দ্রুত বিবর্ণ এবং দ্রুত করার সহজ উপায়। উপভোগ করুন

সম্পাদনা : আপনার ক্রিয়াকলাপে এটি যুক্ত করুন:

yourView.startAnimation(AnimationUtils.loadAnimation(co‌​ntext, R.anim.yourAnimation));

6
+1 কারণ এই উত্তরের সাহায্যে আমি বিবর্ণ হয়ে যেতে, ফেইড আউট এবং ম্লান হয়ে যেতে পারি (কেবল পুনরায় সেট করা = "2" সেট করা)। গৃহীত উত্তরের প্রস্তাব হিসাবে আমি অ্যানিমেশনগুলিকে একত্রিত করতে পারিনি।
এলায়ান্টে

1
এই alphaসংস্থানটি ঘোষণার পরে আমি কীভাবে এটি ব্যবহার করতে পারি? ধন্যবাদ
জোজফেল্ফো

1
জোৎসফেল্ফো এটি কেবলমাত্র একটি অ্যানিমেশন এক্সএমএল তাই কোডে এটি লোড করুন এবং তারপরে আপনি যা দেখতে চান তা দেখতে স্টার্ট অ্যানিমেশনটি কল করুন।
কনরাড উইঙ্কোভস্কি

অ্যানিমেশন পদ্ধতিতে অ্যানিমেশন অবজেক্টটি আর্গুমেন্ট হিসাবে প্রয়োজন! আমি কি এটি পাস করতে হবে?
আহমদ বতানী

যারা আরও সম্পূর্ণ উত্তর খুঁজছেন তাদের জন্য: viewToAnimate.startAnimation(AnimationUtils.loadAnimation(context, R.anim.fade_in_out)যেখানে অ্যানিম ফোল্ডারে রেস-এর অধীনে একটি ফেইড_ইন_আউট.এক্সএমএল ফাইল রয়েছে।
ক্রিস নাইট

32
viewToAnimate.animate().alpha(1).setDuration(1000).setInterpolator(new DecelerateInterpolator()).withEndAction(new Runnable() {
    @Override
    public void run() {
        viewToAnimate.animate().alpha(0).setDuration(1000).setInterpolator(new AccelerateInterpolator()).start();
    }
}).start();

4
মার্শমেলোর জন্য এলিগান্ট!
এলইটি

26

অ্যানিম্যাটরসেট ব্যবহার করে আমার সমাধানটি এখানে দেওয়া হয়েছে যা অ্যানিমেশনসেটের চেয়ে কিছুটা বেশি নির্ভরযোগ্য বলে মনে হচ্ছে।

// Custom animation on image
ImageView myView = (ImageView)splashDialog.findViewById(R.id.splashscreenImage);

ObjectAnimator fadeOut = ObjectAnimator.ofFloat(myView, "alpha",  1f, .3f);
fadeOut.setDuration(2000);
ObjectAnimator fadeIn = ObjectAnimator.ofFloat(myView, "alpha", .3f, 1f);
fadeIn.setDuration(2000);

final AnimatorSet mAnimationSet = new AnimatorSet();

mAnimationSet.play(fadeIn).after(fadeOut);

mAnimationSet.addListener(new AnimatorListenerAdapter() {
    @Override
    public void onAnimationEnd(Animator animation) {
        super.onAnimationEnd(animation);
        mAnimationSet.start();
    }
});
mAnimationSet.start();

কাজের সমাধান পেতে আমাকে অ্যানিমেশনের পরিবর্তে একটি অবজেক্ট অ্যানিমেটার ব্যবহার করতে হয়েছিল কারণ কোনও কারণে, যখনই আমি আলফাএনিমেশন শুরু করি তখন এটি দু'বার দৌড়ে যায় এবং কিছু অদ্ভুত ঝলকানি করে।
অ্যান্ড্রু ওরোবেটর

মার্জিত সমাধান
ভ্লাদ

ঠিক আছে, খুব দেরী হয়েছে তবে আমি মনে করি এটি আবার একই দৃষ্টিতে আবার ব্যবহার করার আগে দয়া করে স্পষ্টভাবে অ্যানিমেশনটিকে কিছুটা সহায়তা করতে পারে ..
ভাবেশ মোড়াদিয়া

21

অন্য বিকল্প:

FadeIn এবং fadeOut এর জন্য 2 অ্যানিমেশন নির্ধারণ করার দরকার নেই । ফেডআউট এর বিপরীত হয় fadeIn

সুতরাং আপনি এনিমেশন দিয়ে এটি করতে পারেন REআমাদের মতো:

AlphaAnimation alphaAnimation = new AlphaAnimation(0.0f, 1.0f);
alphaAnimation.setDuration(1000);
alphaAnimation.setRepeatCount(1);
alphaAnimation.setRepeatMode(Animation.REVERSE);
view.findViewById(R.id.imageview_logo).startAnimation(alphaAnimation);

তারপরে অ্যানিমেশনএন্ড :

alphaAnimation.setAnimationListener(new Animation.AnimationListener() {
    @Override
        public void onAnimationStart(Animation animation) {
            //TODO: Run when animation start
        }

        @Override
        public void onAnimationEnd(Animation animation) {
            //TODO: Run when animation end
        }

        @Override
        public void onAnimationRepeat(Animation animation) {
            //TODO: Run when animation repeat
        }
    });

12

আমি যেমন এক্সএমএল এর শক্তিতে (লেআউটগুলির জন্য) বিশ্বাস করি, এটি গৃহীত উত্তরের সমতুল্য , তবে বিশুদ্ধভাবে অ্যানিমেশন সংস্থান হিসাবে:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:interpolator/accelerate_decelerate"
    android:fillAfter="true">
    <alpha
        android:fromAlpha="0"
        android:toAlpha="1"
        android:duration="1000" />
    <alpha
        android:fromAlpha="1"
        android:toAlpha="0"
        android:duration="1000"
        android:startOffset="1000"/>
</set>

fillAfterঅ্যানিমেশন শেষ করার পরে বিবর্ণ থাকার জন্য এটি The interpolatorহ্যান্ডলগুলি ক্ষেপক , অ্যানিমেশন হিসাবে আপনি অনুমান করতে পারেন। আপনি লিনিয়ার বা ওভারশুট এর মতো অন্যান্য ধরণের ইন্টারপোলটারও ব্যবহার করতে পারেন।

আপনার দৃশ্যে আপনার অ্যানিমেশনটি শুরু করতে ভুলবেন না:

yourView.startAnimation(AnimationUtils.loadAnimation(co‌​ntext, R.anim.fade));

@ কেজি সাইবেক্স কোনও সমস্যা নেই, খুশি আমি সাহায্য করতে পারলাম :)
ডার্কসিগনাস

1
খুব সহায়ক এবং পরিষ্কার। আমার জন্য পুরোপুরি কাজ করে।
ফার্নান্দো বারবোসা

9

আমি এখানে ভিউগুলিকে আউট / আউট করার জন্য যা ব্যবহার করতাম, আশা করি এটি কারও সাহায্য করবে।

private void crossFadeAnimation(final View fadeInTarget, final View fadeOutTarget, long duration){
    AnimatorSet mAnimationSet = new AnimatorSet();
    ObjectAnimator fadeOut = ObjectAnimator.ofFloat(fadeOutTarget, View.ALPHA,  1f, 0f);
    fadeOut.addListener(new Animator.AnimatorListener() {
        @Override
        public void onAnimationStart(Animator animation) {
        }

        @Override
        public void onAnimationEnd(Animator animation) {
            fadeOutTarget.setVisibility(View.GONE);
        }

        @Override
        public void onAnimationCancel(Animator animation) {
        }

        @Override
        public void onAnimationRepeat(Animator animation) {
        }
    });
    fadeOut.setInterpolator(new LinearInterpolator());

    ObjectAnimator fadeIn = ObjectAnimator.ofFloat(fadeInTarget, View.ALPHA, 0f, 1f);
    fadeIn.addListener(new Animator.AnimatorListener() {
        @Override
        public void onAnimationStart(Animator animation) {
            fadeInTarget.setVisibility(View.VISIBLE);
        }

        @Override
        public void onAnimationEnd(Animator animation) {}

        @Override
        public void onAnimationCancel(Animator animation) {}

        @Override
        public void onAnimationRepeat(Animator animation) {}
    });
    fadeIn.setInterpolator(new LinearInterpolator());
    mAnimationSet.setDuration(duration);
    mAnimationSet.playTogether(fadeOut, fadeIn);
    mAnimationSet.start();
}

একরকম এটিই কেবলমাত্র উত্তরটির মধ্যে দৃশ্যমানতা সেট করার অন্তর্ভুক্ত, দুর্দান্ত
লূক

8

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


8

অ্যানিম্যাটর তৈরি করতে অ্যানিমেশন ব্যবহার করতে পারলে পারেন

anim (ডিরেক্টরি) -> fade_out.xML

<?xml version="1.0" encoding="UTF-8"?>
<objectAnimator
    android:propertyName="alpha"
    android:valueFrom="0"
    android:valueTo="1"
    xmlns:android="http://schemas.android.com/apk/res/android"/>

জাবাতে

Animator animator = AnimatorInflater.loadAnimator(context, R.animator.fade_out);
animator.setTarget(the_view_you_want_to_animation);
animator.setDuration(1000);
animator.start();

কেবল জাভা কোড দিয়ে অ্যানিমেশনটি বিবর্ণ করার অন্যান্য উপায়

ObjectAnimator fadeOut = ObjectAnimator.ofFloat(the_view_you_want_to_animation, "alpha",  1f, 0);
fadeOut.setDuration(2000);
fadeOut.start();

ডিরেক্টরি এনিম * অ্যানিমেটার নয়
কোসাস

4

আপনি অ্যানিমেশনলিস্টনারও ব্যবহার করতে পারেন, এরকম কিছু:

fadeIn.setAnimationListener(new AnimationListener() {
    @Override
    public void onAnimationEnd(Animation animation) {
        this.startAnimation(fadeout);
    }
});

0

সংক্ষিপ্ত হওয়ায় আমি ভাইটালি জিংচেনকোস সমাধানটি সত্যিই পছন্দ করি ।

সরল বিবর্ণ হওয়ার জন্য এখানে কোটলিনে একটি এমনকি ব্রিফার সংস্করণ

viewToAnimate?.alpha = 1f
viewToAnimate?.animate()
             ?.alpha(0f)
             ?.setDuration(1000)
             ?.setInterpolator(DecelerateInterpolator())
             ?.start()
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.