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

有个android.widget.ViewAnimator类继承至FrameLayout,ViewAnimator类的作用是为FrameLayout里面的View切换提供动画效果。该类有如下几个和动画相关的函数:

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;
}
}


OVER !