Android启动动画

本文介绍了一种使用Android实现两个Activity间动画过渡的方法。通过在EnterActivity中设置ImageView的缩放动画,并利用AnimatorSet同步播放动画,最后通过Intent跳转到MainActivity,实现了淡入淡出的过渡效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

话不多说,先上图:


其实就是两个Activity,用动画过渡的效果。

先看第一个EnterActivity.

      布局:

             

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                android:layout_width="match_parent"
                android:layout_height="match_parent">

    <ImageView
        android:id="@+id/iv_entry"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scaleType="fitXY"
        android:src="@drawable/ic_screen_default"/>

    <View
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@drawable/black_bg"/>


    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_marginBottom="106dp"
        android:gravity="center"
        android:text="Demo"
        android:textColor="@android:color/white"
        android:textSize="24sp"/>

</RelativeLayout>

中间的View是为了给图片一个渐变效果,在black_bg中指定了gradient.

接下来就是在Activity中添加动画效果了.

/**
 * Created by wonder on 2016/10/27.
 */

public class EntryActivity extends BaseActivity {

    @BindView(R.id.iv_entry)
    ImageView mSplashImage;

    private static final int ANIMATION_TIME = 2000;
    private static final float SCALE_END = 1.13f;

    private static final int[] IMAGES={
            R.drawable.ic_screen_default,
            R.drawable.splash0,
            R.drawable.splash1,
            R.drawable.splash2,
            R.drawable.splash3,
            R.drawable.splash4,
            R.drawable.splash5,
            R.drawable.splash6,
            R.drawable.splash7,
            R.drawable.splash8,
            R.drawable.splash9,
            R.drawable.splash10,
            R.drawable.splash11,
            R.drawable.splash12,
            R.drawable.splash13,
            R.drawable.splash14,
            R.drawable.splash15,
            R.drawable.splash16};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_entry);
        ButterKnife.bind(this);
        setTranslucentStatus(true);
        Random random = new Random(SystemClock.currentThreadTimeMillis());
        mSplashImage.setImageResource(IMAGES[random.nextInt(IMAGES.length)]);

        Observable.timer(1000, TimeUnit.MILLISECONDS)
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Action1<Long>() {
                    @Override
                    public void call(Long aLong) {
                        startAnim();
                    }
                });
    }
    private void startAnim(){
        ObjectAnimator animatorX = ObjectAnimator.ofFloat(mSplashImage,"scaleX",1f,SCALE_END);
        ObjectAnimator animatorY = ObjectAnimator.ofFloat(mSplashImage,"scaleY",1f,SCALE_END);

        AnimatorSet set = new AnimatorSet();
        set.setDuration(ANIMATION_TIME).play(animatorX).with(animatorY);
        set.start();
        set.addListener(new AnimatorListenerAdapter() {
            @Override
            public void onAnimationEnd(Animator animation) {
                Intent intent = new Intent(EntryActivity.this, MainActivity.class);
                startActivity(intent);
                EntryActivity.this.finish();
                overridePendingTransition(android.R.anim.fade_in,android.R.anim.fade_out);
            }
        });
    }
}

用了一个IMAGES数组是为了使动画多样化.使用RxJava的Observab在后台线程池中启动动画. AnimatorSet是一个动画集合,play(animatorX).with(animatorY)意味着在播放animatorX的同时播放animatorY. overridePendingTransition的两个参数是指进入动画和出去动画.注意:必须在starActivity或finish之后立即调用.

Demo中的参数为系统定义的,是淡入浅出的效果.当然也可以传入自定义的动画.


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值