Android 划屏欢迎动画的实现及多实现方式的考虑------ViewFlipper的实现

在开篇之前首先给大家说说这个划屏欢迎动画,也不单是动画吧,也许大家都接触过了,就是你安装完一个APP之后,

进入APP之后,一直往后划屏,直到滑倒最后一个的时候,点击一个带有事件的控件,开始后面的操作,比如进入主界

面之类的,而且划屏只能是最前或者最后的那一个,不能循环的滑,就比如 1-2-3 之后 只能 3-2-1 这样滑了,一般只有

第一次安装的时候或者卸载重装的时候会出现,装了之后,kill掉进程之后,重新启动APK是不会在此出现此划屏界面

的,因为一般的商业APP为了给用户更好的用户体验,一般只实现一次,除非卸载重装了,实现方式就是在 Application 

被自动创建之前查看当前系统内是否存在此签名的APP(包名/应用程序名字),存在就无需开启导入动画了,直接接入

APP程序里

那我们怎么来做呢,其实实现的方式多种多样,这里我主要讲2个左右 ViewFlipper / ViewPager,也是我自己看API写

得,没有参考谁的,因为本来就不难,就是一些控件的使用罢了,本篇主讲ViewFlipper

API,这里我就不做详细解释了,你们可以自己看看API源码


首先我们要摸清楚,划屏欢迎动画的一些操作,因为是触摸着屏幕左右划动,顾名思义------划,那我们就需要写一个触摸事件,然后在触摸事件里做我们的操作,所以onTouchEvent是必须要实现的,然后判断手势操作

package com.example.engineerjspanimation;
/**
 * Engineer-Jsp.Animation
 * @author Engineer-Jsp
 * @date 2014.11.28
 * ViewFlipper use
 * */
import android.os.Bundle;
import android.view.MotionEvent;
import android.widget.ViewFlipper;
import android.app.Activity;
public class MainActivity extends Activity {
	private ViewFlipper viewFlipper;
	private float s_x,e_x;
    /**
     * Activity is Create --Lifecycle Functions
     * */
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		// Load Controls
		viewFlipper = (ViewFlipper)findViewById(R.id.view_Flipper);
	}
	/**
	 * Touch Event
	 * From the press to bounce judgment about paddling distance x direction
	 * */
	@Override
	public boolean onTouchEvent(MotionEvent event) {
		switch (event.getAction()) {
		// Press
//		case MotionEvent.ACTION_DOWN:
//			s_x = event.getX();
//			break;
//        // Bounce
//		case MotionEvent.ACTION_UP:
//			e_x = event.getX();
//			if(e_x>s_x){//Left to right
//				viewFlipper.setInAnimation(this,R.anim.left_to_right_in);
//				viewFlipper.setOutAnimation(this, R.anim.left_to_right_out);
//				viewFlipper.showNext();
//			}else{//Right to left
//				viewFlipper.setInAnimation(this, R.anim.right_to_left_in);
//				viewFlipper.setOutAnimation(this, R.anim.right_to_left_out);
//				viewFlipper.showPrevious();
//			}
//			break;
		case MotionEvent.ACTION_MOVE:
			if(e_x>s_x){//Left to right
				viewFlipper.setInAnimation(this,R.anim.left_to_right_in);
				viewFlipper.setOutAnimation(this, R.anim.left_to_right_out);
				viewFlipper.showNext();
			}else{//Right to left
				viewFlipper.setInAnimation(this, R.anim.right_to_left_in);
				viewFlipper.setOutAnimation(this, R.anim.right_to_left_out);
				viewFlipper.showPrevious();
			}
		break;
		}
		return super.onTouchEvent(event);
	}
}

上述参数s_x,e_x为起始的x坐标和结束时的坐标,因为我们实现的是左右的划屏,跟y坐标没有关系,所以我们只需要对x坐标做一些处理和判断,首先我们要弄清楚,当我们向右滑的时候,e_x > s_x ,也就是结束时x的坐标大于起始时的x坐标,反之则向左,那思路就很清晰了,onTouchEnevt 提供了一些的事件,在此篇我用到了

ACTION_DOWN:按下(手指按下)

ACTION_UP:弹起(手指松开)

ACTION_MOVE:移动(手指移动)

被注释掉的代码分别判断了左右去向,及执行方法调用和动画xml文件,另外我也用MOVE测试了划屏,发现没什么实际意义,而且屏幕还会一直抖动,因为我把UP注释掉了,没划动一个x坐标,都会执行一次动画,所以它会一直抖动

从左到右------进入xml代码:

<?xml version="1.0" encoding="utf-8"?>
<!-- 
From left to enter the animation on the right
 -->
 <set xmlns:android="http://schemas.android.com/apk/res/android" >
    <translate
        android:duration="0"
        android:fromXDelta="-100%p"
        android:toXDelta="0" />
</set>

从左到右------出去xml代码:

<?xml version="1.0" encoding="utf-8"?>
<!-- 
From the left to the right out of the animation
 -->
 <set xmlns:android="http://schemas.android.com/apk/res/android" >
    <translate
        android:duration="0"
        android:fromXDelta="0"
        android:toXDelta="100%p" />
</set>

从右到左------进入xml代码:

<?xml version="1.0" encoding="utf-8"?>
<!-- 
From right to left into the animation
 -->
 <set xmlns:android="http://schemas.android.com/apk/res/android" >
    <translate
        android:duration="0"
        android:fromXDelta="100%p"
        android:toXDelta="0" />
</set>
从右到左------出去xml代码:

<?xml version="1.0" encoding="utf-8"?>
<!-- 
From right to left out of the movie
 -->
 <set xmlns:android="http://schemas.android.com/apk/res/android" >
    <translate
        android:duration="0"
        android:fromXDelta="0"
        android:toXDelta="-100%p" />
</set>

参数 duration 为动画完成的时间,我设置为0s,算是比较快的了,剩下两个参数就不需要解释了,一看字母字面意思就可以知道了

测试效果图就不上可,测试了ViewFilpper发现它不适合用来做我们的划屏欢迎动画,很多效果实现出来的与真实的效果是相违背的,所以我们要摈弃这种写法,接下来跟我用ViewPager写法去实现,看看效果,下一篇就是用ViewPager实现划屏导航的讲解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Engineer-Jsp

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值