ViewFlipper
Android系统自带的一个多页面管理控件,它可以实现子界面的自动切换
为ViewFlipper加入View
静态导入:在layout布局中直接导入(不推荐,不够灵活)
<ViewFilpper
android:id="@+id/flipper"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:flipInterval="4000" >
<ImageView
android:scaleType="matrix"
android:id="@+id/ex2"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<ImageView
android:scaleType="matrix"
android:id="@+id/ex3"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<ImageView
android:scaleType="matrix"
android:id="@+id/ex4"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</ViewFlipper>
动态导入:addView()方法
flipper = (ViewFlipper) findViewById(R.id.flipper);
flipper.addView(getImageView(R.drawable.pic1));
flipper.addView(getImageView(R.drawable.pic2));
flipper.addView(getImageView(R.drawable.pic3));
flipper.addView(getImageView(R.drawable.pic4));
ViewFlipper常用方法
setInAnimation:设置View进入屏幕时候使用的动画
setOutAnimation:设置View退出屏幕时候使用的动画
showNext:调用该函数来显示ViewFlipper里面的下一个View
showPrevious:调用该函数来显示ViewFlipper里面的上一个View
setFlipInterval:设置View之间切换的时间间隔
startFlipping:使用上面设置的时间间隔来切换所有的View,切换回循环进行
stopFlipping:停止View切换
利用ViewFlipper实现图片轮播
left_in.xml
<?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>
<?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
<?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
<?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>
main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<ViewFlipper
android:id="@+id/flipper"
android:layout_width="match_parent"
android:layout_height="match_parent"
></ViewFlipper>
</LinearLayout>
MainActivity.java
public class MainActivity extends AppCompatActivity {
private ViewFlipper flipper;
private int[] resId = {R.drawable.pic1, R.drawable.pic2, R.drawable.pic3, R.drawable.pic4};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.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 resId) {
ImageView image = new ImageView(this);
//按图片宽高
// image.setImageResource(resId);
//铺满整个屏幕
image.setBackgroundResource(resId);
return image;
}
}
支持手势滑动的ViewFlipper
public class MainActivity extends AppCompatActivity {
private ViewFlipper flipper;
private int[] resId = {R.drawable.pic1, R.drawable.pic2, R.drawable.pic3, R.drawable.pic4};
private float startX;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.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();
}
@Override
public boolean onTouchEvent(MotionEvent event) {
switch(event.getAction()) {
//手指落下
case MotionEvent.ACTION_DOWN:
startX = event.getX();
break;
//手指滑动
case MotionEvent.ACTION_MOVE:
break;
//手指离开
case MotionEvent.ACTION_UP:
//向右滑动(看前一页)
if (event.getX() - startX > 100) {
// flipper.setInAnimation(this, R.anim.left_in);
// flipper.setInAnimation(this, R.anim.left_out);
flipper.showPrevious();//显示前一页
}
//向左滑动(看后一页)
if (startX - event.getX() > 100) {
// flipper.setInAnimation(this, R.anim.right_in);
// flipper.setInAnimation(this, R.anim.right_out);
flipper.showNext();//显示后一页
}
break;
}
return super.onTouchEvent(event);
}
private ImageView getImageView(int resId) {
ImageView image = new ImageView(this);
//按图片宽高
// image.setImageResource(resId);
//铺满整个屏幕
image.setBackgroundResource(resId);
return image;
}
}
源码地址: https://github.com/LiuchangDuan/demo