ITKeyword,专注技术干货聚合推荐

注册 | 登录

Android ViewFliper实现屏幕切换

vennl 分享于 2011-12-15

2019阿里云全部产品优惠券(新购或升级都可以使用,强烈推荐)
领取地址https://promotion.aliyun.com/ntms/yunparter/invite.html

ViewFlipper 可以包含多个View 且View之间的切换可以通过Animation来设置切换效果,如渐变。

xml布局:

ViewFlipper里面有四个页面,下面通过手势切换页面。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:orientation="vertical" android:layout_width="fill_parent"
	android:background="@drawable/static_bg_snowy_day"
	android:layout_height="fill_parent">
	<ViewFlipper android:id="@+id/flipper"
		android:layout_width="fill_parent" android:layout_height="fill_parent">
		<include android:id="@+id/firstlayout" layout="@layout/first"></include>
		<include android:id="@+id/secondlayout" layout="@layout/second"></include>
		<include android:id="@+id/thirdlayout" layout="@layout/third"></include>
		<include android:id="@+id/fourthlayout" layout="@layout/fourth"></include>
	</ViewFlipper>
</LinearLayout>


public class viewflipper extends Activity implements OnGestureListener,
		OnTouchListener {
	private ViewFlipper mFlipper;
	GestureDetector mGestureDetector;
	private int mCurrentLayoutState;
	private static final int FLING_MIN_DISTANCE = 100;
	private static final int FLING_MIN_VELOCITY = 200;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.flipper);
		mFlipper = (ViewFlipper) findViewById(R.id.flipper);
		// 注册一个用于手势识别的类
		mGestureDetector = new GestureDetector(this);
		// 给mFlipper设置一个listener
		mFlipper.setOnTouchListener(this);
		mCurrentLayoutState = 0;
		// 允许长按住ViewFlipper,这样才能识别拖动等手势
		mFlipper.setLongClickable(true);
	}

	public boolean onDown(MotionEvent e) {

		return false;
	}

	/**
	 * 用户按下触摸屏、快速移动后松开即触发这个事件 e1:第1个ACTION_DOWN MotionEvent e2:最后一个ACTION_MOVE
	 * MotionEvent velocityX:X轴上的移动速度,像素/秒 velocityY:Y轴上的移动速度,像素/秒 触发条件 :
	 * X轴的坐标位移大于FLING_MIN_DISTANCE,且移动速度大于FLING_MIN_VELOCITY个像素/秒
	 */
	public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
			float velocityY) {
		if (e1.getX() - e2.getX() > FLING_MIN_DISTANCE
				&& Math.abs(velocityX) > FLING_MIN_VELOCITY) {
			// 当像左侧滑动的时候
			// 设置View进入屏幕时候使用的动画
			mFlipper.setInAnimation(AnimationUtils.loadAnimation(this,
     R.anim.push_left_in))
			// 设置View退出屏幕时候使用的动画
			mFlipper.setOutAnimation(AnimationUtils.loadAnimation(this,
     R.anim.push_left_out));
			mFlipper.showNext();
		} else if (e2.getX() - e1.getX() > FLING_MIN_DISTANCE
				&& Math.abs(velocityX) > FLING_MIN_VELOCITY) {
			// 当像右侧滑动的时候
			mFlipper.setInAnimation(AnimationUtils.loadAnimation(this,
     R.anim.push_right_in));
			mFlipper.setOutAnimation(AnimationUtils.loadAnimation(this,
     R.anim.push_right_out));
			mFlipper.showPrevious();
		}
		return false;
	}

	public void onLongPress(MotionEvent e) {
	}

	public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
			float distanceY) {
		return false;
	}

	public void onShowPress(MotionEvent e) {
	}

	public boolean onSingleTapUp(MotionEvent e) {
		return false;
	}

	public boolean onTouch(View v, MotionEvent event) {
		// 一定要将触屏事件交给手势识别类去处理(自己处理会很麻烦的)
		return mGestureDetector.onTouchEvent(event);
	}
}


进入动画

<?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>


ViewFlipper 可以包含多个View 且View之间的切换可以通过Animation来设置切换效果,如渐变。 xml布局: ViewFlipper里面有四个页面,下面通过手势切换页面。 <xml version="1.0" encoding="utf

相关阅读排行


用户评论

游客

相关内容推荐

最新文章

×

×

请激活账号

为了能正常使用评论、编辑功能及以后陆续为用户提供的其他产品,请激活账号。

您的注册邮箱: 修改

重新发送激活邮件 进入我的邮箱

如果您没有收到激活邮件,请注意检查垃圾箱。