使用ViewFlipper去实现页面滑动动画效果
首先是准备工作:
先准备多张图片放到drawable文件夹下,并且在res目录下创建anim文件夹,用来存放动画xml文件。
然后在主布局layout中添加ViewFlipper标签并设置其属性。
<ViewFlipper
android:id="@+id/flipper"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</ViewFlipper>
然后就是代码部分:
package com.example.viewflipper;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.MotionEvent;
import android.widget.ImageView;
import android.widget.ViewFlipper;
public class MainActivity extends ActionBarActivity {
private ViewFlipper flipper;//声明ViewFlipper
private float startX;//声明手动滑动X初始坐标
private int[] resId = { R.drawable.tt1, R.drawable.tt2, R.drawable.tt3, R.drawable.tt4 };//图片数组集合
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
flipper = (ViewFlipper) findViewById(R.id.flipper);
// 动态导入的方式为ViewFlipper加入子View
for (int i = 0; i < resId.length; i++) {
flipper.addView(getImageView(resId[i]));
}
// 为ViewFlipper去添加动画效果
flipper.setInAnimation(this, R.anim.left_in);//左进动画
flipper.setOutAnimation(this, R.anim.left_out);//左出动画
// 设定ViewFlipper视图切换的时间间隔
flipper.setFlipInterval(3000);
// 开始播放
flipper.startFlipping();
}
private ImageView getImageView(int a) {
ImageView imageView = new ImageView(this);
imageView.setBackgroundResource(a);//把图片当做背景资源添加显示
return imageView;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
// TODO Auto-generated method stub
switch (event.getAction()) {
/*
* 手指落下
*/
case MotionEvent.ACTION_DOWN:
startX = event.getX();// 手指落下的坐标(横坐标)
break;
/*
* 手指滑动
*/
case MotionEvent.ACTION_MOVE:
// 向右滑动看前一页
if (event.getX() - startX > 50) {
flipper.setInAnimation(this, R.anim.left_in);
flipper.setOutAnimation(this, R.anim.left_out);
flipper.showPrevious();// 显示前一页
}
// 向左滑动看后一页
if (startX - event.getX() > 50) {
flipper.setInAnimation(this, R.anim.right_in);
flipper.setOutAnimation(this, R.anim.right_out);
flipper.showNext();// 显示后一页
}
break;
/*
* 手指离开
*/
case MotionEvent.ACTION_UP:
break;
}
return super.onTouchEvent(event);
}
}
anim文件夹:
left_in:(左进)
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<translate
android:duration="2000"
android:fromXDelta="-100%p"
android:toXDelta="0" />
<alpha
android:fromAlpha="0.5"
android:toAlpha="1"
android:duration="2000"
/>
</set>
left_out:(左出)
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<translate
android:duration="2000"
android:fromXDelta="0"
android:toXDelta="100%p" />
<alpha
android:duration="2000"
android:fromAlpha="0.5"
android:toAlpha="1" />
</set>
right_in:(右进)
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<translate
android:duration="2000"
android:fromXDelta="100%p"
android:toXDelta="0" />
<alpha
android:duration="2000"
android:fromAlpha="0.5"
android:toAlpha="1" />
</set>
right_out:(右出)
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<translate
android:duration="2000"
android:fromXDelta="0"
android:toXDelta="-100%p" />
<alpha
android:duration="2000"
android:fromAlpha="0.5"
android:toAlpha="1" />
</set>
扩展:
ViewFlipper常用方法:
setInAnimation:设置View进入屏幕时候使用的动画
setOutAnimation:设置View退出屏幕时候使用的动画
showNext:调用该函数来显示ViewFlipper里面的下一个View
showPrevious:调用该函数来显示ViewFlipper里面的上一个View
setFlipInterval:设置View之间切换的时间间隔
startFlipping:使用上面设置的时间间隔来开始切换所有的View,切换会循环进行
stopFlipping:停止View切换