您的位置:首页 > 移动开发 > Android开发

Android ViewFlipper 手势触摸案例

2011-06-30 17:43 435 查看
广大博友,看过后帮忙顶顶,谢谢大家!!!

转载请注明: http://blog.csdn.net/richway2010/archive/2011/06/29/6574987.aspx

博主:各位博友,网友们,大家网上好!欢迎光临本博客。 欢迎多多交流,多提意见,互相学习,互相进步,我们的口号是:好好学习,天天向上。】

直接进入主题,先来看看效果:





从右往左触摸屏幕:





实现:main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:layout_height="fill_parent" 
              android:layout_width="fill_parent" 
              android:orientation="vertical" xmlns:android="http://schemas.android.com/apk/res/android"        
              >
	<ViewFlipper android:id="@+id/flipper"
	             android:layout_height="fill_parent" android:layout_width="fill_parent">
		<include android:id="@+id/firstlayout" layout="@layout/left"/>
		<include android:id="@+id/secondlayout" layout="@layout/center"/>
		<include android:id="@+id/thirdlayout" layout="@layout/right"/>
	</ViewFlipper>
</LinearLayout>




center.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:gravity="center_vertical" 
              android:layout_height="fill_parent" 
              android:layout_width="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android">
  <ImageView android:layout_height="wrap_content" android:layout_width="wrap_content" android:src="@drawable/a3">
</ImageView></LinearLayout>




left.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:gravity="center_vertical"
	android:layout_height="fill_parent" android:layout_width="fill_parent"
	xmlns:android="http://schemas.android.com/apk/res/android">
	<ImageView android:layout_height="wrap_content"
		android:layout_width="wrap_content" android:src="@drawable/a2">
	</ImageView>
</LinearLayout>




right.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:gravity="center_vertical"
	android:layout_height="fill_parent" android:layout_width="fill_parent"
	xmlns:android="http://schemas.android.com/apk/res/android">
	<ImageView android:layout_height="wrap_content"
		android:layout_width="wrap_content" android:src="@drawable/a1"></ImageView>
</LinearLayout>




主配置文件:AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="org.flipper"
      android:versionCode="1"
      android:versionName="1.0">
    <uses-sdk android:minSdkVersion="8" />

    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".ViewFlipperDemoActivity"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    </application>
</manifest>




主类:ViewFlipperDemoActivity.java

import android.app.Activity;
import android.os.Bundle;
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.AccelerateInterpolator;
import android.view.animation.Animation;
import android.view.animation.TranslateAnimation;
import android.widget.ViewFlipper;
public class ViewFlipperDemoActivity extends Activity implements OnGestureListener,OnTouchListener{
	private ViewFlipper mFlipper;
	GestureDetector mGestureDetector;
	private int mCurrentLayoutState;
	private static final int FLING_MIN_DISTANCE = 120;
	private static final int FLING_MIN_VELOCITY = 240;

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

	/**
	 * 定义从右侧进入的动画效果
	 * @return
	 */
	protected Animation inFromRightAnimation() {
		Animation inFromRight = 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);
		inFromRight.setDuration(500);
		inFromRight.setInterpolator(new AccelerateInterpolator());
		return inFromRight;
	}

	/**
	 * 定义从左侧退出的动画效果
	 * @return
	 */
	protected Animation outToLeftAnimation() {
		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(500);
		outtoLeft.setInterpolator(new AccelerateInterpolator());
		return outtoLeft;
	}

	/**
	 * 定义从左侧进入的动画效果
	 * @return
	 */
	protected Animation inFromLeftAnimation() {
		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(500);
		inFromLeft.setInterpolator(new AccelerateInterpolator());
		return inFromLeft;
	}

	/**
	 * 定义从右侧退出时的动画效果
	 * @return
	 */
	protected Animation outToRightAnimation() {
		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(500);
		outtoRight.setInterpolator(new AccelerateInterpolator());
		return outtoRight;
	}

	public boolean onDown(MotionEvent e) {
		// TODO Auto-generated method stub
		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(inFromRightAnimation());
			//设置View退出屏幕时候使用的动画
			mFlipper.setOutAnimation(outToLeftAnimation());
			mFlipper.showNext();
	    } else if (e2.getX() - e1.getX() > FLING_MIN_DISTANCE
	            && Math.abs(velocityX) > FLING_MIN_VELOCITY) {
	    	// 当像右侧滑动的时候
			mFlipper.setInAnimation(inFromLeftAnimation());
			mFlipper.setOutAnimation(outToRightAnimation());
			mFlipper.showPrevious();
	    }
		return false;
	}
	public boolean onTouch(View v, MotionEvent event) {
		// 将触屏事件交给手势识别类去处理
		return mGestureDetector.onTouchEvent(event);
	}
}




希望对你有帮助,谢谢
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: