`

如何通过GestureDetector实现屏幕事件监听(滑动切换Layout)

阅读更多
内容如题:
1.SlideExample.java文件
package com.example;

import android.app.Activity;
import android.os.Bundle;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.ViewGroup;

public class SlideExample extends Activity {

	public ViewGroup container1, container2;

	private GestureDetector gestureDetector;

	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		// 监听屏幕动作事件
		SampleGuest gestureListener = new SampleGuest(this);
		gestureDetector = new GestureDetector(gestureListener);

		container1 = (ViewGroup) findViewById(R.id.container1);
		container2 = (ViewGroup) findViewById(R.id.container2);
	}

	// called automatically, any screen action will Triggered it
	public boolean onTouchEvent(MotionEvent event) {
		if (gestureDetector.onTouchEvent(event))
			return true;
		else
			return false;
	}

}


2.SampleGuest.java文件
package com.example;

import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.GestureDetector.OnGestureListener;
import android.view.animation.AnimationUtils;

public class SampleGuest implements OnGestureListener {

	SlideExample se;

	private static final int SWIPE_MAX_OFF_PATH = 100;

	private static final int SWIPE_MIN_DISTANCE = 100;

	private static final int SWIPE_THRESHOLD_VELOCITY = 100;

	public SampleGuest(SlideExample se) {
		this.se = se;
	}

	// 用户轻触触摸屏,由1个MotionEvent ACTION_DOWN触发
	public boolean onDown(MotionEvent e) {
		Log.d("TAG", "[onDown]");
		return true;
	}

	// 用户按下触摸屏、快速移动后松开,由1个MotionEvent ACTION_DOWN,
	// 多个ACTION_MOVE, 1个ACTION_UP触发
	// e1:第1个ACTION_DOWN MotionEvent
	// e2:最后一个ACTION_MOVE MotionEvent
	// velocityX:X轴上的移动速度,像素/秒
	// velocityY:Y轴上的移动速度,像素/秒
	public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
			float velocityY) {
		if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH)
			return false;

		if ((e1.getX() - e2.getX()) > SWIPE_MIN_DISTANCE
				&& Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
			se.container1.setAnimation(AnimationUtils.loadAnimation(se,
					R.anim.push_left_out));
			se.container2.setVisibility(View.VISIBLE);
			se.container2.setAnimation(AnimationUtils.loadAnimation(se,
					R.anim.push_right_in));
			se.container1.setVisibility(View.GONE);

		} else if ((e2.getX() - e1.getX()) > SWIPE_MIN_DISTANCE
				&& Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
			se.container1.setVisibility(View.VISIBLE);
			se.container1.setAnimation(AnimationUtils.loadAnimation(se,
					R.anim.push_left_in));
			se.container2.setAnimation(AnimationUtils.loadAnimation(se,
					R.anim.push_right_out));
			se.container2.setVisibility(View.GONE);
		}
		return true;
	}

	// 用户长按触摸屏,由多个MotionEvent ACTION_DOWN触发
	public void onLongPress(MotionEvent e) {
		Log.d("TAG", "[onLongPress]");
	}

	// 用户按下触摸屏,并拖动,由1个MotionEvent ACTION_DOWN, 多个ACTION_MOVE触发
	public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
			float distanceY) {
		Log.d("TAG", "[onScroll]");
		return true;
	}

	// 用户轻触触摸屏,尚未松开或拖动,由一个1个MotionEvent ACTION_DOWN触发
	// 注意和onDown()的区别,强调的是没有松开或者拖动的状态
	public void onShowPress(MotionEvent e) {
		Log.d("TAG", "[onShowPress]");

	}

	// 用户(轻触触摸屏后)松开,由一个1个MotionEvent ACTION_UP触发
	public boolean onSingleTapUp(MotionEvent e) {
		Log.d("TAG", "[onSingleTapUp]");
		return true;
	}

}


3.main.xml文件
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:layout_width="fill_parent" android:layout_height="fill_parent"
	android:id="@+id/container">

	<RelativeLayout android:layout_width="fill_parent"
		android:id="@+id/container1" android:layout_height="fill_parent"
		android:visibility="visible">
		<ImageView android:layout_width="fill_parent"
			android:layout_height="fill_parent" android:background="@drawable/one" />
	</RelativeLayout>

	<RelativeLayout android:layout_width="fill_parent"
		android:background="@drawable/gray" android:id="@+id/container2"
		android:visibility="gone" android:layout_height="fill_parent">
		<ImageView android:layout_width="fill_parent"
			android:layout_height="fill_parent" android:background="@drawable/three" />
	</RelativeLayout>

</RelativeLayout>


4.程序所用到的anim中的几个xml文件内容
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="1000"/>
	<alpha android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="100" />
</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="1000" />
	<alpha android:fromAlpha="1.0" android:toAlpha="1.0"
		android:duration="400" />
</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="1000"/>
	<alpha android:fromAlpha="1.0" android:toAlpha="1.0" android:duration="400" />
</set>

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="1000"/>
	<alpha android:fromAlpha="1.0" android:toAlpha="1.0" android:duration="400" />
</set>



6.至于程序中所用到的图片,大家可以自己找几张,修改名称即可
分享到:
评论
3 楼 烧伤的火柴 2011-11-17  
初学者 来取经来了
又到收藏的时候了
2 楼 zky314 2011-08-18  
1 楼 javajava00001 2011-08-05  
            

相关推荐

    图片实现滑动切换

    标题“图片实现滑动切换”所指的就是通过编程技术实现在Android设备上,用户可以左右滑动来浏览多张图片的功能。这种效果通常可以通过`ViewFlipper`组件来实现,这也是描述中提到的关键点。 `ViewFlipper`是Android...

    Android 滑动切换以及屏幕手势

    1. **监听触屏事件**:这是实现滑动切换的基础,通过监听用户的触摸动作,可以捕捉到滑动操作。 2. **识别手势**:当触屏事件发生时,系统需要进一步判断用户是否执行了滑动手势。 3. **响应手势**:一旦识别出手势...

    Android实现滑动屏幕切换图片

    要实现滑动屏幕切换图片,需要使用 GestureDetector 来监听用户的滑动手势,通过 OnGestureListener 监听器来回调滑动事件,并在滑动事件中更改图片。 二、实现滑动屏幕切换图片的步骤 1. 创建一个 ImageView 控件...

    GestureDetector的实现

    结合`GestureDetector`,`ViewFlipper`可以在用户滑动时实现平滑的视图切换,提升应用的用户体验。通过以上内容,你应该对如何在Android中实现手势检测和使用`ViewFlipper`有了更深入的理解。在实际项目中,可以根据...

    使用ViewFlipper+GestureDetector实现轮播图(APP引导页面)

    通过这种方式,我们成功地使用`ViewFlipper`和`GestureDetector`实现了轮播图功能,包括手动滑动和自动播放。这种实现方式简单易懂,且适用于大多数Android项目中的轮播图需求。在实际开发中,你还可以根据需要添加...

    Android ViewFlipper实现页面的滑动切换

    下面将详细探讨如何在Android应用中使用ViewFlipper来实现页面的滑动切换。 首先,我们需要了解ViewFlipper的基本结构。一个ViewFlipper可以包含多个子视图,如ImageView、TextView或自定义布局。在初始化时,...

    滑动屏幕,系统帮助

    ViewFlipper是Android SDK提供的一种布局容器,专门用于实现屏幕的滑动切换效果。本篇将深入探讨如何利用ViewFlipper来实现滑动屏幕功能,并提供相关的知识点。 **一、ViewFlipper基础** 1. **定义**:ViewFlipper...

    Android 界面左右滑动切换

    - **手势监听**: 为了实现滑动切换,你需要监听用户的滑动手势,这通常通过实现 `GestureDetector.OnGestureListener` 接口并覆盖其方法来完成。你可以使用 ` GestureDetector.SimpleOnGestureListener` 作为基础类...

    UI开发第八篇——ViewFlipper 左右滑动效果

    本篇将深入探讨如何利用ViewFlipper组件和GestureDetector类实现左右滑动切换视图的效果,这在主页面或多个内容区域展示的场景中非常常见。 ViewFlipper是Android提供的一个布局容器,它可以方便地在多个子视图之间...

    Listview的左右滑动实现

    标题"Listview的左右滑动实现"涉及到了如何在ListView中添加手势监听,使得用户可以通过左右滑动来切换Activity,提升用户体验。以下是对这个主题的详细解释: 一、ListView基本概念 ListView是Android SDK中的一个...

    音乐播放器 ViewFlipper 滑动屏幕

    4. **监听滑动事件**: 如果希望用户可以通过手势滑动来切换视图,可以为ViewFlipper添加滑动监听器,例如使用`GestureDetector`来检测滑动手势。 通过上述步骤,我们可以实现音乐播放器界面中ViewFlipper的滑动...

    android滑动标签

    总结,"android滑动标签"主要是通过TabLayout和ViewPager实现界面的滑动切换,提供简洁的用户交互。而"滑动切换Activity"虽然不是标准实践,但在特定场景下可以通过手势检测和Intent来实现。理解并熟练运用这些组件...

    仿微信滑动标题栏导航

    在Android应用开发中,"仿微信滑动标题栏导航"是一种常见的交互设计,它提供了类似微信App的用户体验,用户可以通过滑动屏幕顶部的标题栏来切换不同的页面或展示更多的操作选项。这种设计使得应用程序更加直观且易于...

    常见的滑动显示不同的界面

    在iOS和Android平台上,开发者可以通过监听`UIPanGestureRecognizer`(iOS)和`GestureDetector`(Android)来捕获用户的滑动操作。在JavaScript环境中,可以使用`touchstart`, `touchmove`, `touchend`等触摸事件来...

    Android高级应用源码做了四个界面的滑动功能,设置了每个界面的移动动画操作.zip

    - 可能自定义了一个监听器,通过监听滑动方向(水平或垂直)来决定页面的切换方向。 通过这份源码,开发者不仅可以学习如何实现基本的滑动操作,还能掌握如何结合动画使界面过渡更加流畅,提升应用的用户体验。这...

    android 图片左右滑动

    为了实现用户手动滑动切换图片,我们需要添加手势识别功能。可以使用`GestureDetector`类来捕获滑动事件。首先,创建一个`GestureDetector`的匿名内部类并重写相关方法: ```java GestureDetector gestureDetector ...

    android viewFipper实现图片上下左右滑动效果

    4. **监听滑动事件**:你可以使用GestureDetector来检测用户的滑动手势。创建一个GestureDetector实例,重写onDown(), onFling()等方法,当检测到合适的滑动事件时,调用ViewFlipper的相应方法。 ```java ...

    仿Android4.0左右滑动切换Tab的UI的源代码.zip

    该资源是一个针对Android应用开发的项目,主要实现了Android 4.0系统风格的左右滑动切换Tab的用户界面。在Android开发中,这样的设计模式常用于构建多面板、多视图的应用,允许用户通过平滑的手势在不同的功能区域...

    仿照滴滴打车底部滑动条

    - **滑动切换**:如果希望支持滑动切换,可以使用手势识别器(如Android的`GestureDetector`或iOS的`UISwipeGestureRecognizer`),处理左右滑动的动作。 4. **动画效果**: - **过渡动画**:在切换选中状态时,...

    安卓Android源码——滑动按钮,滑动锁的实现(已封装好,可直接使用).zip

    `GestureDetector`提供了`onDown()`、`onScroll()`、`onFling()`等方法,通过重写这些方法,我们可以捕捉到用户手指在屏幕上的移动轨迹,从而实现滑动操作。 1. 创建`GestureDetector`实例: ```java ...

Global site tag (gtag.js) - Google Analytics