Android中欢迎界面背景图片放大效果

效果图

实现逻辑

  1. 背景放一张图片
  2. 图片上面添加你所需要的信息
  3. 将图片的长宽拉伸,不过是在一定时间内.均匀的拉伸

用到知识点

  • Android属性动画 ObjectAnimator
  • AnimatorSet

ObjectAnimator

ObjectAnimator.ofFloat(Object target, String propertyName,String ... values);

通过ObjectAnimator的静态工厂方法,创建一个ObjectAnimator对象
其中共有三个参数

  1. 需要操纵的View对象
  2. 要操纵的属性,包含多个,下面会说!
  3. 可变数组参数,传入多个属性,意思是从第一个渐变到最后一个属性
//这句话的意思就是传入一个ImageView对象,围绕X进行2D缩放,由原始的大小方法到原来的1.13倍!
ObjectAnimator animatorX = ObjectAnimator.ofFloat(mSplashImage, "scaleX", 1f, 1.13f);

关于ObjectAnimator.ofFloat();第二个参数

  • translationX和translationY: 这两个属性作为一种增量来控制着view对象从它布局容器的左上角坐标开始的位置
  • rotation . rotationX 和 rotationY : 这三个属性控制view对象围绕只带你进行2D和3D旋转
  • scaleX和scaleY: 这两个属性控制view对象围绕它的支点进行2D缩放
  • pirotX 和 PirotY :这两个属性控制View对象的支点位置,围绕支点进行旋转和缩放变换处理.默认支点位置就是中心位置
  • X 和Y :这是两个使用的属性,它描述了View在他的容器中最终的位置,它是最初的左上角坐标和translationX,translationY值的累计和/
  • alpha VIew 对象的透明度.默认是1(不透明),0(不看见)

其中还用到了AnimatorSet 动画集合.

作用就是将多个动画通过 playTogether(),playSequentially(),animSet.play().with(),defore(),after()这些方法来控制多个动画的协同工作方式,从而做到对动画播放顺序的精确控制

        AnimatorSet set = new AnimatorSet();
        set.setDuration(ANIMATION_DURATION).play(animatorX).with(animatorY);
        set.start();

代码实现

public class EntryActivity extends Activity {

    private static final int ANIMATION_DURATION = 2000;
    private static final float SCALE_END = 1.13F;

    private static final int[] SPLASH_ARRAY = {
            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,
    };

    private ImageView mSplashImage;
    private TextView titleView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_entry);
        mSplashImage = ButterKnife.findById(this, R.id.iv_entry);
        titleView = ButterKnife.findById(this, R.id.tv_title);

        Random r = new Random(SystemClock.elapsedRealtime());
        //设置随机的图片
        mSplashImage.setImageResource(SPLASH_ARRAY[r.nextInt(SPLASH_ARRAY.length)]);

        animateImage();

    }

    private void animateImage() {

        //表示从1f --> 1.13f 的变化过程
        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_DURATION).play(animatorX).with(animatorY);
        set.start();


        //对动画的监听,动画结束后立马跳转到主页面上
        set.addListener(new AnimatorListenerAdapter() {
            @Override
            public void onAnimationEnd(Animator animation) {
                MainActivity.start(EntryActivity.this);
                EntryActivity.this.finish();
            }
        });
    }
}

你可能感兴趣的:(Android,Hero)