在开篇之前首先给大家说说这个划屏欢迎动画,也不单是动画吧,也许大家都接触过了,就是你安装完一个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实现划屏导航的讲解