push_right_out.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="0" android:toXDelta="100%p"
android:duration="500" />
<alpha android:fromAlpha="1.0" android:toAlpha="0.1"
android:duration="500" />
</set>
push_right_in.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="-100%p" android:toXDelta="0"
android:duration="500" />
<alpha android:fromAlpha="0.1" android:toAlpha="1.0"
android:duration="500" />
</set>
push_left_out.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="0" android:toXDelta="-100%p"
android:duration="500" />
<alpha android:fromAlpha="1.0" android:toAlpha="0.1"
android:duration="500" />
</set>
push_left_in.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="100%p" android:toXDelta="0"
android:duration="500" />
<alpha android:fromAlpha="0.1" android:toAlpha="1.0"
android:duration="500" />
</set>
package talent.library;
import talent.pad.R;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;
import android.view.GestureDetector.SimpleOnGestureListener;
import android.view.View.OnTouchListener;
import android.view.animation.AnimationUtils;
import android.widget.ViewFlipper;
public class ViewFlipperEx{
//public member
public final ViewFlipper Handle;
//private variant
private GestureDetector gestureDetector;
// touch listener
private OnTouchListener touchListener = new OnTouchListener(){
@Override
public boolean onTouch(View v, MotionEvent event) {
if(!gestureDetector.onTouchEvent(event)){
com.Logi(""+Handle.getDisplayedChild());//获取当前显示的视图索引
return false;
}
return true;
}
};
// gesture listener
private SimpleOnGestureListener gestureListener = new SimpleOnGestureListener(){
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,float velocityY){
if (e1.getX() - e2.getX() > 100 && Math.abs(velocityX) > 50) {
FlipLast();
} else if (e2.getX() - e1.getX() > 100 && Math.abs(velocityX) > 50) {
FlipNext();
}else{
return false;
}
return true;
}
};
public ViewFlipperEx(ViewFlipper vf){
Handle = vf;
gestureDetector = new GestureDetector(gestureListener);
}
//switch to last page
public void FlipLast(){
Handle.setInAnimation(AnimationUtils.loadAnimation(Handle.getContext(), R.anim.push_left_in));
Handle.setOutAnimation(AnimationUtils.loadAnimation(Handle.getContext(), R.anim.push_left_out));
Handle.showPrevious();//向左
}
//switch to next page
public void FlipNext(){
Handle.setInAnimation(AnimationUtils.loadAnimation(Handle.getContext(), R.anim.push_right_in));
Handle.setOutAnimation(AnimationUtils.loadAnimation(Handle.getContext(), R.anim.push_right_out));
Handle.showNext();//向右
}
//add view that can response gesture to flip page
public void AddGestureView(View view){
view.setLongClickable(true);
view.setOnTouchListener(touchListener);
}
}
- isFlipping: 用来判断View切换是否正在进行
- setFilpInterval:设置View之间切换的时间间隔
- startFlipping:使用上面设置的时间间隔来开始切换所有的View,切换会循环进行
- stopFlipping: 停止View切换