ایجاد انیمیشن Crossfading در اندروید

جمعه 27 آذر 1394

در این مقاله می خواهیم در مورد انیمیشن crossfading صحبت نماییم، این انیمیشن برای نمایش عکس های یک گالری پشت سر هم که به صورت fading انجام می شود استفاده می شود.

ایجاد انیمیشن Crossfading در اندروید

انیمیشن ها انواع مختلفی دارد به صورت زیر:

1-Crossfading two views

2-استفاده از viewpager اسلاید برای نمایش اسلاید ها

3-نمایش انیمیشن ها به صورت card flip

4-نمایش به صورت zooming

5-نمایش به صورت تغییر layout

در این مقاله قصد داریم تصاویر را به صورت fade نمایش دهیم که چند عکس استفاده می کنیم و ابتدا یک عکس نمایش داده می شود بعد از چند ثانیه محو خواهد شد و بعد تصویر دوم نمایش داده خواهد شد و زمان محو شدن و نمایش تصویر بعدی به کد ما بستگی دارد.

قدم اول :استفاده از یک iamgeview است که به صورت زیر در activity قرار می دهید:

<ImageView
       android:layout_width="700dp"
       android:layout_height="600dp"
       android:id="@+id/im"
        />

کد کلاس جاوا به صورت زیر است:

import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.app.Activity;
import android.os.Handler;
import android.view.Menu;
import android.view.View;
import android.view.animation.*;
import android.widget.ImageView;
 
public class MainActivity extends Activity {
    ImageView im;
    Animation fadeIn;
    Animation fadeOut;
    int fadeOutTime=5000;
    int timeBetween=3000;
    int images[]={R.drawable.scene1,R.drawable.scene2,R.drawable.scene3};
    static  int index=0;
    private AnimationSet animation;
    private Handler mHandler;
    final Context context=this;
 
    private Runnable mCountUpdater = new Runnable() {
        private int mCount = 0;
 
        @Override
        public void run() {
            if(mCount>2)
              return;
            else
            {
             func();
                mCount++;
            mHandler.postDelayed(this, 9000);
            }
        }
    };
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mHandler = new Handler();
        mHandler.post(mCountUpdater);
 
    }
    public void func()
    {
 
        if(index<=2)
        {
 
        im=(ImageView)findViewById(R.id.im);
 
        im.setImageResource(images[index]);
 
        fadeIn = new AlphaAnimation(0.00f, 1);
        fadeIn.setInterpolator(new LinearInterpolator()); // add this
        fadeIn.setDuration(500);
 
        fadeOut = new AlphaAnimation(1, 0f);
        fadeOut.setInterpolator(new AccelerateInterpolator()); // and this
        fadeOut.setStartOffset(timeBetween);
        fadeOut.setDuration(fadeOutTime);
 
        animation = new AnimationSet(false); // change to false
        animation.addAnimation(fadeIn);
        animation.addAnimation(fadeOut);
        animation.setRepeatCount(1);
        animation.setFillAfter(true);
        im.setAnimation(animation);
        index=index+1;
 
        animation.setAnimationListener(new Animation.AnimationListener() {
            @Override
            public void onAnimationStart(Animation animation) {
 
            }
 
            @Override
            public void onAnimationEnd(Animation animation) {
 
                if(index==3)
                {
                    Intent i=new Intent(context,Second.class);
                    startActivity(i);
                }
 
            }
 
            @Override
            public void onAnimationRepeat(Animation animation) {
 
            }
        });
        }
 
       }
 
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
 
}

در کد بالا از یک آلفا استفاده می کنیم، که اگر 1 باشد به طور کامل مات می شود، و اگر آلفا 0 باشد تصویر شفاف خواهد شد، animation.setFillAfter(true) اگر این true باشد برای معرفی یک تاخیر بین انیمیشن ها است که تصویر دوباره پش از محو شدن ظاهر شود.

و بعد از نمایش عکس ها به یک layout دیگر بروید و یک متن را نمایش دهد.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:background="#45454545">
  <TextView
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      android:layout_marginTop="150dp"
      android:layout_marginLeft="70dp"
      android:text="Hello"
      android:textSize="30dp"/>
 
</LinearLayout>

قدم بعدی ایجاد کلاس برای activity که متن را قرار است نشان دهدکه به صورت زیر خواهد بود:

import android.app.Activity;
import android.os.Bundle;
 
public class Second extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.second_layout);
    }
}

داخل androidmanifest هم کلاس های ایجاد شده را تعریف می نماییم.

خروجی به صورت زیر خواهد بود:

فایل های ضمیمه

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید