鲁西化工的领导排名:用ViewFlipper实现滑屏,带有层叠转屏效果

来源:百度文库 编辑:九乡新闻网 时间:2024/04/29 14:44:10


package com.android.view;

import android.content.Context;
import android.util.AttributeSet;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;
import android.view.GestureDetector.OnGestureListener;
import android.view.View.OnTouchListener;
import android.view.animation.AnimationUtils;
import android.widget.ViewFlipper;

public class CascadeViewFlipper extends ViewFlipper implements OnTouchListener, OnGestureListener{
private final Context context;
private GestureDetector gestureDetector;
protected int FLING_MIN_DISTANCE = 100; //横向滑动多少后才能转屏
GestureDetector mGestureDetector; //监听事件
int currentIndex = 0; //初始化在第一个位置

public CascadeViewFlipper(Context context, AttributeSet attrs) {
super(context, attrs);
this.context = context;
gestureDetector = new GestureDetector(this);
setOnTouchListener(this); //对viewflipper设定监听事件,很多人都忘记写要注意
        setLongClickable(true);
}

@Override 
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
/**
* 向左滑动
*/
    if (e1.getX() - e2.getX() > FLING_MIN_DISTANCE) {
        if (currentIndex < getChildCount() - 1){ 
            currentIndex++;
            setInAnimation(AnimationUtils.loadAnimation(context, R.anim.cascade_left_in));//设置向左滑动进来页面的动画效果
            setOutAnimation(AnimationUtils.loadAnimation(context, R.anim.cascade_left_out));//设置向左滑动页面出去的动画效果
            showNext(); 
        }
        return true; 
    }
    /**
* 向右滑动
*/
    else if (e1.getX() - e2.getX() < -FLING_MIN_DISTANCE) { 
        if (currentIndex > 0){
            currentIndex--;
            setInAnimation(AnimationUtils.loadAnimation(context, R.anim.cascade_right_in));  //设置向右滑动进来页面的动画效果
            setOutAnimation(AnimationUtils.loadAnimation(context, R.anim.cascade_right_out));  //设置向右滑动页面出去的动画效果
            showPrevious();
        }
        return true;
    }
    return false;
}

@Override
public boolean onTouch(View v, MotionEvent event) {
return gestureDetector.onTouchEvent(event);
}

@Override
public boolean onDown(MotionEvent e) {
// TODO Auto-generated method stub
return false;
}

@Override
public void onLongPress(MotionEvent e) {
// TODO Auto-generated method stub

}

@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
float distanceY) {
// TODO Auto-generated method stub
return false;
}

@Override
public void onShowPress(MotionEvent e) {
// TODO Auto-generated method stub

}

@Override
public boolean onSingleTapUp(MotionEvent e) {
// TODO Auto-generated method stub
return false;
}
}


以下是xml代码:

xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:persistentDrawingCache="animation"
android:flipInterval="1000"
android:inAnimation="@anim/scale_small_in"
android:outAnimation="@anim/scale_small_out">
android:text="1"
android:background="#FFFFFF"
android:id="@+id/TextView_next1"
android:layout_width="fill_parent"
android:layout_height="fill_parent">

android:text="2"
android:background="#FF0000"
android:id="@+id/TextView_next2"
android:layout_width="fill_parent"
android:layout_height="fill_parent">

android:text="3"
android:background="#00FF00"
android:id="@+id/TextView_next3"
android:layout_width="fill_parent"
android:layout_height="fill_parent">



cascade_left_in.xml的代码,向左边滑进的效果

android:interpolator="@android:anim/decelerate_interpolator">
    android:fromXDelta="100%p" android:toXDelta="0"
        android:duration="1000"/>

cascade_left_out.xml的代码,向左边滑出的效果

android:interpolator="@android:anim/decelerate_interpolator">
        android:interpolator="@android:anim/accelerate_decelerate_interpolator"
    android:fromXScale="1.0" android:toXScale="0.5"
    android:fromYScale="1.0" android:toYScale="0.5"
    android:pivotX="50%p" android:pivotY="50%p"
    android:duration="1000"/>
    android:interpolator="@android:anim/decelerate_interpolator"
android:fromAlpha="1.0" android:toAlpha="0.0"
android:duration="1000"
/>

cascade_right_in.xml的代码,向右边滑进的效果

android:interpolator="@android:anim/decelerate_interpolator">
        android:interpolator="@android:anim/accelerate_decelerate_interpolator"
    android:fromXScale="0.5" android:toXScale="1.0"
    android:fromYScale="0.5" android:toYScale="1.0"
    android:pivotX="50%p" android:pivotY="50%p"
    android:duration="1000"/>
    android:interpolator="@android:anim/decelerate_interpolator"
android:fromAlpha="0" android:toAlpha="1.0"
android:duration="1000"
/>

cascade_right_out.xml的代码,向右边滑出的效果

android:interpolator="@android:anim/decelerate_interpolator">
    android:fromXDelta="0" android:toXDelta="100%p"
        android:duration="1000"/>

Activity的代码:
package com.android.view;

import android.app.Activity;
import android.os.Bundle;

public class Main extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.view_flipper);
}
}