ViewFlipper实现简单的幻灯片效果(转)

出自:http://blog.csdn.net/shaojie519/article/details/6622739

屏幕切换指的是在同一个Activity内屏幕见的切换,最长见的情况就是在一个FrameLayout内有多个页面。


有个android.widget.ViewAnimator类继承至FrameLayout,ViewAnimator类的作用是为FrameLayout里面的View切换提供动画效果。该类有如下几个和动画相关的函数:
l setInAnimation:设置View进入屏幕时候使用的动画,该函数有两个版本,一个接受单个参数,类型为android.view.animation.Animation;一个接受两个参数,类型为Context和int,分别为Context对象和定义Animation的resourceID。
 
  • setOutAnimation: 设置View退出屏幕时候使用的动画,参数setInAnimation函数一样。
  • showNext: 调用该函数来显示FrameLayout里面的下一个View。
  • showPrevious: 调用该函数来显示FrameLayout里面的上一个View。
一般不直接使用ViewAnimator而是使用它的两个子类ViewFlipper和ViewSwitcher。ViewFlipper可以用来指定FrameLayout内多个View之间的切换效果,可以一次指定也可以每次切换的时候都指定单独的效果。该类额外提供了如下几个函数:
 
  • isFlipping: 用来判断View切换是否正在进行
  • setFilpInterval:设置View之间切换的时间间隔
  • startFlipping:使用上面设置的时间间隔来开始切换所有的View,切换会循环进行
  • stopFlipping: 停止View切换
下面看看ViewFlipper实现的效果吧:
                                                             
package com.shao.flipper;


import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.animation.AnimationUtils;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.ViewFlipper;
public class FlipperActivity extends Activity {

	public final static int VIEW_TEXT = 0;
	public final static int VIEW_IMAGE = 1;
	boolean autoflag  =  true;
    Button previous,next,autoStart;
    ViewFlipper flipper;
    
	/** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        initiaView();
        //添加视图
        flipper.addView(addTextByText("动画开始....."));
        flipper.addView(addImageById(R.drawable.photo1));
        flipper.addView(addImageById(R.drawable.photo2));
        flipper.addView(addImageById(R.drawable.photo3));
        flipper.addView(addImageById(R.drawable.photo4));
        flipper.addView(addImageById(R.drawable.photo5));
        flipper.addView(addImageById(R.drawable.photo6));
        flipper.addView(addImageById(R.drawable.photo7));
        flipper.addView(addImageById(R.drawable.photo8));
        flipper.addView(addTextByText("动画结束....."));
    }
    
    
    private void initiaView(){
    	previous = (Button) findViewById(R.id.previousButton);
    	next = (Button) findViewById(R.id.nextButton);
    	autoStart = (Button) findViewById(R.id.autoButton);
    	
    	flipper = (ViewFlipper) findViewById(R.id.flipper);
    	flipper.setInAnimation(AnimationUtils.loadAnimation(this,
                android.R.anim.fade_in));
        flipper.setOutAnimation(AnimationUtils.loadAnimation(this,
                android.R.anim.fade_out));
        
        previous.setOnClickListener(listener);
        next.setOnClickListener(listener);
        autoStart.setOnClickListener(listener);
    }
    
    private OnClickListener listener = new OnClickListener(){
		public void onClick(View v) {
			// TODO Auto-generated method stub
			switch(v.getId()){
			case R.id.previousButton:
				flipper.showPrevious();
				break;
				
			case R.id.nextButton:
				flipper.showNext();
				break;
			case R.id.autoButton:
				
				if(autoflag){  //自动播放
					flipper.setAutoStart(autoflag);
					flipper.startFlipping();
					autoStart.setText("停止");
					autoflag = false;
				}else{      //取消自动播放
					flipper.stopFlipping();
					autoStart.setText("开始");
					autoflag = true;
				}
				break;	
			}//switch
		}//onClick
    };//OnClickListener
    
    public View addTextByText(String text){
    		TextView tv = new TextView(this);
    		tv.setText(text);
    		tv.setGravity(1);
    		return tv;
    }
    
    public View addImageById(int id){
		ImageView iv = new ImageView(this);
		iv.setImageResource(id);
		
		return iv;
    }
}

猜你喜欢

转载自hz-chenwenbiao-91.iteye.com/blog/2007019