ViewFlipper是Android提供提个可自动切换View的控件,承于ViewAnimator类。而ViewAnimator类继承于FrameLayout,查看ViewAnimator类的源码可以看出此类的作用主要是为其中的View切换提供动画效果。常用方法如下:
setInAnimation:设置View进入屏幕时候使用的动画。该方法有两个重载方法,即可以直接传入Animation对象,也可以传入定义的Animation文件的resourceID。
setOutAnimation:设置View退出屏幕时候使用的动画。使用方法和setInAnimation方法一样。
showNext:调用该方法可以显示FrameLayout里面的下一个View。
showPrevious:调用该方法可以来显示FrameLayout里面的上一个View。
setFilpInterval:设置View切换的时间间隔。参数为毫秒。
startFlipping:开始进行View的切换,时间间隔是上述方法设置的间隔数。切换会循环进行。
stopFlipping:停止View切换。
setAutoStart:设置是否自动开始。如果设置为“true”,当ViewFlipper显示的时候View的切换会自动开始。
直接上代码:
package com.example.lowp.viewflipper;
import android.app.Activity;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.view.Window;
import android.widget.ImageView;
import android.widget.Toast;
import android.widget.ViewFlipper;
public class MainActivity extends Activity {
private ViewFlipper viewFlipper;
private int[] resId = {R.mipmap.pic1,R.mipmap.pic2,R.mipmap.pic3,R.mipmap.pic4};
private float startX; //滑动的起始坐标
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
//初始化控件
viewFlipper = (ViewFlipper) findViewById(R.id.viewFlipper);
for (int i = 0; i < resId.length;i++){
viewFlipper.addView(getImage(resId[i]));
}
//添加动画效果
// viewFlipper.setInAnimation(this, R.anim.left_in);
// viewFlipper.setOutAnimation(this , R.anim.left_out);
// //3s切换
// viewFlipper.setFlipInterval(3000);
// viewFlipper.startFlipping();
}
public ImageView getImage(int resId){
final ImageView imageView = new ImageView(this);
imageView.setBackgroundResource(resId);
// imageView.setOnClickListener(new View.OnClickListener() {
// @Override
// public void onClick(View v) {
// Toast.makeText(MainActivity.this,imageView.getBackground().toString(),Toast.LENGTH_SHORT).show();
// }
// });
return imageView;
}
@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){
viewFlipper.setInAnimation(this, R.anim.left_in);
viewFlipper.setOutAnimation(this, R.anim.left_out);
viewFlipper.showPrevious();
}
//向左滑动,出现后一页
if(startX - event.getX() > 100){
viewFlipper.setInAnimation(this, R.anim.right_in);
viewFlipper.setOutAnimation(this, R.anim.right_out);
viewFlipper.showNext();
}
break;
}
return super.onTouchEvent(event);
}
}
源码下载:http://download.youkuaiyun.com/detail/qq_24789865/9123769