欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

基于RxJava实现酷炫启动页

程序员文章站 2024-03-06 12:32:43
前言 rxjava 在 github 主页上的自我介绍是 "a library for composing asynchronous and event-based pr...

前言

rxjava 在 github 主页上的自我介绍是 "a library for composing asynchronous and event-based programs using observable sequences for the java vm"(一个在 java vm 上使用可观测的序列来组成异步的、基于事件的程序的库)。这就是 rxjava ,概括得非常精准。

之前注意到coding app启动页很是酷炫,今天我们使用rxjava和属性动画模仿实现其效果。

先来看看效果

基于RxJava实现酷炫启动页

一、新建启动页welcomeactivity

注意,我们这里让welcomeactivity继承activity不要继承appcompatactivity,因为appcompatactivity会默认去加载主题,造成卡顿

  public class welcomeactivity extends activity {

  @override
  protected void oncreate(bundle savedinstancestate) {
    super.oncreate(savedinstancestate);
    setcontentview(r.layout.activity_welcome);
  }
}

二、定义引导页布局activity_welcome.xml

不多说直接上代码:

<?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/welcomimg1"/>

  <view
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/welcomimg_bg"/>


  <textview
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignparentbottom="true"
    android:layout_marginbottom="100dp"
    android:gravity="center"
    android:text="xialong"
    android:textcolor="@android:color/white"
    android:textsize="23sp"/>

  <imageview
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@mipmap/google_logo"
    android:layout_alignparentbottom="true"
    android:layout_marginbottom="60dp"
    android:layout_centerinparent="true"
    android:tint="@android:color/white" />
</relativelayout>

这里我们用了相对布局,在imageview上覆盖一个view,该view用渐变色背景welcomimg_bg.xml以暗化图片,

welcomimg_bg.xml代码如下:

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

  <gradient
    android:angle="90"
    android:startcolor="@color/black"
    android:endcolor="@android:color/transparent"
    />

</shape>

其中startcolor表示起始颜色,endcolor表示结束颜色,angle=90 表示颜色从下往上渐变。

三、随机选取图片并使用rxjava启动动画

最后我们的welcomeactivity.java长这样:

public class welcomeactivity extends activity {

  @bind(r.id.iv_entry)
  imageview miventry;

  private static final int anim_time = 2000;

  private static final float scale_end = 1.15f;

  private static final int[] imgs={
      r.drawable.welcomimg1,r.drawable.welcomimg2,
      r.drawable.welcomimg3,r.drawable.welcomimg4,
      r.drawable.welcomimg5, r.drawable.welcomimg6,
      r.drawable.welcomimg7,r.drawable.welcomimg8,
      r.drawable.welcomimg9,r.drawable.welcomimg10,
      r.drawable.welcomimg11,r.drawable.welcomimg12,};

  @override
  protected void oncreate(bundle savedinstancestate) {
    super.oncreate(savedinstancestate);
    setcontentview(r.layout.activity_welcome);
    butterknife.bind(this);

    random random = new random(systemclock.elapsedrealtime());//systemclock.elapsedrealtime() 从开机到现在的毫秒数(手机睡眠(sleep)的时间也包括在内)
    miventry.setimageresource(imgs[random.nextint(imgs.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(miventry, "scalex", 1f, scale_end);
    objectanimator animatory = objectanimator.offloat(miventry, "scaley", 1f, scale_end);

    animatorset set = new animatorset();
    set.setduration(anim_time).play(animatorx).with(animatory);
    set.start();

    set.addlistener(new animatorlisteneradapter()
    {

      @override
      public void onanimationend(animator animation)
      {

        startactivity(new intent(welcomeactivity.this, mainactivity.class));
        welcomeactivity.this.finish();
      }
    });
  }
}

这里的rxjava使用了timer操作符,它的意思是延迟执行某个操作,第一个参数表示延迟时间,第二个参数是时间单位。

好了,就酱。以上就是用rxjava打造酷炫启动页的全部内容,希望本文对大家学习android开发有所帮助。