链接地址:http://www.cnblogs.com/lknlfy/archive/2012/03/05/2381025.html

一、概述

GestureDetector是一个用于识别手势的类,这里所讲的手势识别,不是模式识别里所讲的手势(用户的手在用摄像头前做的动作)识别,而是说用户的手在触摸屏上做的手势(比如滑动等),它可以识别一般的手势,也可以识别用户自定义的手势。

二、要求

利用GestureDetector、ViewFlipper类实现两个View之间的切换。

三、实现

新建工程MyGesture,修改/res/layout/main.xml文件,在里面添加一个ViewFlipper,完整的main.xml文件如下:

 1 <?xml version="1.0" encoding="utf-8"?>
2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3 android:layout_width="fill_parent"
4 android:layout_height="fill_parent"
5 android:orientation="vertical" >
6
7 <ViewFlipper
8 android:id="@+id/viewflipper"
9 android:layout_width="fill_parent"
10 android:layout_height="fill_parent"
11 >
12
13 </ViewFlipper>
14
15 </LinearLayout>

接着,在/res/layout下添加2个布局文件:firstview.xml和secondview.xml,它们的内容都是一个TextView和一个ImageView,firstview.xml如下:

 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
2 android:layout_width="fill_parent"
3 android:layout_height="fill_parent"
4 android:orientation="vertical" >
5
6 <TextView
7 android:layout_width="fill_parent"
8 android:layout_height="wrap_content"
9 android:text="这是第一个View"
10 android:textColor="#FFFF0000"
11 android:gravity="center_horizontal"
12 android:textSize="20dip"
13 />
14
15
16 <ImageView
17 android:id="@+id/fimg"
18 android:layout_width="fill_parent"
19 android:layout_height="wrap_content"
20 android:src="@drawable/sir"
21 />
22
23
24 </LinearLayout>

secondview.xml内容如下:

 1 <?xml version="1.0" encoding="utf-8"?>
2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3 android:layout_width="fill_parent"
4 android:layout_height="fill_parent"
5 android:orientation="vertical" >
6
7 <TextView
8 android:layout_width="fill_parent"
9 android:layout_height="wrap_content"
10 android:text="这是第二个View"
11 android:textColor="#FF0000FF"
12 android:gravity="center_horizontal"
13 android:textSize="20dip"
14 />
15
16 <ImageView
17 android:id="@+id/fimg"
18 android:layout_width="fill_parent"
19 android:layout_height="wrap_content"
20 android:src="@drawable/android"
21 />
22
23
24 </LinearLayout>

最后,修改MyGestureActivity.java文件,主要定义一个GestureDetectorListener类用于实现GestureDetector.OnGestureListener接口,完整的内容如下:

  1 package com.nan.gesture;
2
3 import android.app.Activity;
4 import android.os.Bundle;
5 import android.view.GestureDetector;
6 import android.view.LayoutInflater;
7 import android.view.MotionEvent;
8 import android.view.View;
9 import android.widget.ViewFlipper;
10
11
12
13 public class MyGestureActivity extends Activity
14 {
15 //滑动距离的差值
16 private static final int DISTANCE = 40;
17
18 private ViewFlipper mViewFlipper = null;
19 private LayoutInflater mLayoutInflater = null;
20 private GestureDetector mGestureDetector = null;
21
22 /** Called when the activity is first created. */
23 @Override
24 public void onCreate(Bundle savedInstanceState)
25 {
26 super.onCreate(savedInstanceState);
27 setContentView(R.layout.main);
28
29 mViewFlipper = (ViewFlipper)this.findViewById(R.id.viewflipper);
30 mLayoutInflater = LayoutInflater.from(MyGestureActivity.this);
31 mGestureDetector = new GestureDetector(this,new GestureDetectorListener());
32
33 //将布局文件firstview.xml变为View对象
34 View firstView = mLayoutInflater.inflate(R.layout.firstview, null);
35 //将布局文件secondview.xml变为View对象
36 View secondView = mLayoutInflater.inflate(R.layout.secondview, null);
37 //添加View
38 mViewFlipper.addView(firstView);
39 //添加View
40 mViewFlipper.addView(secondView);
41
42 }
43
44 @Override
45 public boolean onTouchEvent(MotionEvent event)
46 {
47 //将触摸事件交给GestureDetector来处理
48 return mGestureDetector.onTouchEvent(event);
49 }
50
51
52 public class GestureDetectorListener implements GestureDetector.OnGestureListener
53 {
54 @Override
55 public boolean onDown(MotionEvent e)
56 {
57 // TODO Auto-generated method stub
58
59
60 return false;
61 }
62
63 @Override
64 public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
65 float velocityY)
66 {
67 // TODO Auto-generated method stub
68
69 if((e1.getX()-e2.getX())>DISTANCE)
70 {
71 //显示下一个view
72 mViewFlipper.showNext();
73 return true;
74 }
75 else if((e2.getX()-e1.getX())>DISTANCE)
76 {
77 //显示前一个view
78 mViewFlipper.showPrevious();
79 return true;
80 }
81 return false;
82 }
83
84 @Override
85 public void onLongPress(MotionEvent e)
86 {
87 // TODO Auto-generated method stub
88
89 }
90
91 @Override
92 public boolean onScroll(MotionEvent e1, MotionEvent e2,
93 float distanceX, float distanceY)
94 {
95 // TODO Auto-generated method stub
96 return false;
97 }
98
99 @Override
100 public void onShowPress(MotionEvent e)
101 {
102 // TODO Auto-generated method stub
103
104 }
105
106 @Override
107 public boolean onSingleTapUp(MotionEvent e)
108 {
109 // TODO Auto-generated method stub
110 return false;
111 }
112
113 }
114
115 }

好了,运行该程序:

用手在屏幕上左右滑动试下:

OK了。

这里view之间的切换并没有加上动画效果,如果加上动画的话就可以做出翻页的效果。

Android应用开发基础篇(13)-----GestureDetector(手势识别)的更多相关文章

  1. Android应用开发基础篇(1)-----Button

    Android应用开发基础篇(1)-----Button   一.概述        Button,顾名思义就是按钮的意思,它主要的功能是响应用户按下按钮时的动作. 二.应用      新建一个工程, ...

  2. Android应用开发基础篇(3)-----ListView

    一.概述 ListView是一个列表显示控件,它的应用非常广泛,在很多应用程序中都可以看到它的身影,比如来电通,网易新闻等等,特别是QQ.因此非常有必要熟练掌握它. 二.要求 能够利用ListView ...

  3. Android应用开发基础篇(4)-----TabHost(选项卡)

    一.概述 TabHost是一种用来显示标签的组件,不清楚?看一下来电通这个应用就知道了.这个组件用起来与其他组件不太一样,它需要继承TabActivity这个类,还有它的布局文件与我们平时用的也有些不 ...

  4. Android应用开发基础篇(11)-----ViewFlipper

    链接地址:http://www.cnblogs.com/lknlfy/archive/2012/03/01/2376067.html 一.概述 ViewFlipper这个部件是用来实现多页显示的,多页 ...

  5. Android应用开发基础篇(2)-----Notification(状态栏通知)

    一.概述      Notification这个部件的功能是在状态栏里显示消息提醒,比如有未读的短信或者是未接的电话,那么状态栏里都会有显示,更或者是从某个应用(比如QQ,酷我音乐等等)里按Home键 ...

  6. Android应用开发基础篇(16)-----ScaleGestureDetector(缩放手势检测)

    链接地址:http://www.cnblogs.com/lknlfy/archive/2012/03/11/2390274.html 一.概述 ScaleGestureDetector这个类是专门用来 ...

  7. Android应用开发基础篇(15)-----URL(获取指定网址里的图片)

    链接地址:http://www.cnblogs.com/lknlfy/archive/2012/03/10/2389190.html 一.概述 URL,说白了就是一个网络地址(网址),通常一个网址里包 ...

  8. Android应用开发基础篇(7)-----BroadcastReceiver

    链接地址:http://www.cnblogs.com/lknlfy/archive/2012/02/22/2363644.html 一.概述 BroadcastReceiver,意思就是广播信息接收 ...

  9. Android应用开发基础篇(12)-----Socket通信

    链接地址:http://www.cnblogs.com/lknlfy/archive/2012/03/03/2378669.html 一.概述 网络通信无论在手机还是其他设备上都应用得非常广泛,因此掌 ...

随机推荐

  1. poj2328---"right on"进入下一个case的模板(while)

    #include <stdio.h> #include <stdlib.h> #include<string.h> int main() { ]; ,end=; w ...

  2. poj2262---素数(质数)的判断

    收获:一开始以为是100万的所有数字,题目要求是只要偶数,也可以分析出来,如果是给一个奇数,当我们给他大于等于3的奇数(这个数加有可能不是质数,但至少满足是奇数,至于是不是质数还要自己判断),剪出来一 ...

  3. 继承过程中对函数中this的认识

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. Visual Studio之Nuget

    一.NuGet是什么? NuGet是一个为大家所熟知的Visual Studio扩展,通过这个扩展,开发人员可以非常方便地在Visual Studio中安装或更新项目中所需要的第三方组件,同时也可以通 ...

  5. PHP GUID的生成源码

    <?php function guid(){ if (function_exists('com_create_guid')){ return com_create_guid(); }else{ ...

  6. 5分种让你了解javascript异步编程的前世今生,从onclick到await/async

      javascript与异步编程 为了避免资源管理等复杂性的问题,javascript被设计为单线程的语言,即使有了html5 worker,也不能直接访问dom. javascript 设计之初是 ...

  7. 堆分配与栈分配---SAP C++电面(5)/FEI

    一直以来总是对这个问题的认识比较朦胧,我相信很多朋友也是这样的,总是听到内存一会在栈上分配,一会又在堆上分配,那么它们之间到底是怎么的区别呢?为了说明这个问题,我们先来看一下内存内部的组织情况. 从上 ...

  8. [转载]标签a的href和onclick

    转载自:http://gocom.primeton.com/blog21307_27051.htm 我以前在写<A>的href和onclick一直很随意,后来出过几次问题,以后才开始重视这 ...

  9. Gow工具

    一 Gow 是什么 Gow (Gnu On Windows) is the lightweight alternative to Cygwin. It uses a convenient NSIS i ...

  10. codeforces 632F. Magic Matrix

    题目链接 给一个n*n的矩阵, 问是否对角线上的元素全都为0, a[i][j]是否等于a[j][i], a[i][j]是否小于等于max(a[i][k], a[j][k]), k为任意值. 前两个都好 ...