坑爹的ViewFlipper,花了我好几个小时

ViewFlipper类是用来手势屏幕切换效果的,屏幕切换指的是在同一个Activity内屏幕见的切换,最长见的情况就是在一个FrameLayout内有多个页面,比如一个系统设置页面;一个个性化设置页面。

主程序在onCreat()处让程序全屏幕运行,以显示类似于全屏幕滑动的面貌。而关键程序在已重写的onTouchEvent()事件,扑捉MotionEvent.ACTION_DOWN事件;将按下时的x坐标记录为起点坐标,接下来扑捉MotionEvent.ACTION_UP事件;将手离开屏幕记录为末坐标,然后判断两者之间的位移,再通过动画的方式显示画面的滑动效果。

java代码如下:

package com.xixi;

import android.app.Activity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.Window;
import android.view.WindowManager;
import android.widget.ViewFlipper;

public class ViewFlipperActivity extends Activity {
    /** Called when the activity is first created. */
	private ViewFlipper viewFlipper;
	private Float float1;
	private Float current;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
       /* getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
        requestWindowFeature(Window.FEATURE_NO_TITLE);*/
        setContentView(R.layout.main);
        viewFlipper=(ViewFlipper) findViewById(R.id.myViewFlipper1);
    }
	@Override
	public boolean onTouchEvent(MotionEvent event) {
		// TODO Auto-generated method stub
		switch (event.getAction()) {
		case MotionEvent.ACTION_DOWN:
			float1=event.getX();
			break;
		case MotionEvent.ACTION_UP:
			current=event.getX();
			/*手指向右滑动*/
			if(float1current){
				viewFlipper.setInAnimation(AnimationHelper.infromright());
				viewFlipper.setOutAnimation(AnimationHelper.outtoleft());
				/*坑爹啊,忘记下面一句了*/
				viewFlipper.showPrevious();
			}
			break;
		}
		return super.onTouchEvent(event);
	}
    
}


 还有一个AnimationHelper类,在类中创建的AnimationTranslateAnimation对象,设置在多短的时间内完成滑动以及每格画间的延迟效果。

package com.xixi;

import android.view.animation.AccelerateInterpolator;
import android.view.animation.Animation;
import android.view.animation.TranslateAnimation;

public class AnimationHelper {
	public static Animation infromleft(){
		Animation infromleft=new TranslateAnimation(
				Animation.RELATIVE_TO_PARENT, 
				-1.0f, Animation.RELATIVE_TO_PARENT, 
				0.0f, Animation.RELATIVE_TO_PARENT, 
				0.0f, Animation.RELATIVE_TO_PARENT, 0.0f);
		infromleft.setDuration(350);
		infromleft.setInterpolator(new AccelerateInterpolator());
		return infromleft;
	}
	public static Animation outtoright(){
		Animation outtoright=new TranslateAnimation(
				Animation.RELATIVE_TO_PARENT, 
				0.0f, Animation.RELATIVE_TO_PARENT, 
				+1.0f, Animation.RELATIVE_TO_PARENT, 
				0.0f, Animation.RELATIVE_TO_PARENT, 0.0f);
		outtoright.setDuration(350);
		outtoright.setInterpolator(new AccelerateInterpolator());
		return outtoright;
	}
	public static Animation outtoleft(){
		Animation outtoleft=new TranslateAnimation(
				Animation.RELATIVE_TO_PARENT,
				0.0f, Animation.RELATIVE_TO_PARENT, 
				-1.0f, Animation.RELATIVE_TO_PARENT, 
				0.0f, Animation.RELATIVE_TO_PARENT, 0.0f);
		outtoleft.setDuration(350);
		outtoleft.setInterpolator(new AccelerateInterpolator());
		return outtoleft;
	}
	public static Animation infromright(){
		Animation infronright=new TranslateAnimation(
				Animation.RELATIVE_TO_PARENT, 
				+1.0f, Animation.RELATIVE_TO_PARENT, 
				0.0f, Animation.RELATIVE_TO_PARENT,
				0.0f, Animation.RELATIVE_TO_PARENT, 0.0f);
		infronright.setDuration(350);
		infronright.setInterpolator(new AccelerateInterpolator());
		return infronright;
	}
}


main.xml文件如下



  
  
    
    
      
      
      
    
    
    
      
       
      
    
  


你可能感兴趣的:(Android)