一、Android提供的两种手势:①Android提供了手势检测,并为手势提供了相应的监听器
      ②Android允许开发者添加手势,并提供了相应的API识别用户手势

二、手势检测:手势检测器类:GestureDetector
 监听器:OnGestureListener,负责对用户的手势行为提供响应
 时间处理方法:boolean OnDraw(MotionEvent e):当触摸事件按下时触发该方法
  boolean OnFing(MotionEvent e1,MotionEvent e2,float velocity X,float velocity Y):当用户在触摸屏上“拖过”时触发该方法。其中 velocity X,float velocity Y代表“拖过”动作在横向,纵向上的速度
abstract void onLongPress(MotionEvent e):当用户在屏幕上长按时触发该方法
onScroll(MotionEvent e,MotionEvent e2,float distanceX,float distanceY):当用户在屏幕上“滚动”时触发该方法
void onShowPress(MotionEvent e):当用户在触摸屏上按下,而还未移动和松开时触发该方法

Android收拾检测步骤:第一步:创建一个GestureDetector对象。创建该对象时必须实现一个GestureDetector.OnGestureListener监听器实例:例如:GestureDetector detector=new GestureDetector(this,this)
    第二步:为应用程序的Activity的TouchEvent事件绑定监听器,在事件处理中指定Activity上的TouchEvent事件交给GestureDetector处理。例如:detector.OnTouchEvent(event)

例子:①演示事件处理的方法
      ②通过手势实现翻页效果:
ViewFlipper组件,该组件可使用动画控制多个组件之间的切换效果
flipper.setInAnimation()设置组件进入的动画
flipper.setOutAnimation()设置组件出去的动画
flipper.showPrevious()显示上一个视图
flipper.showNext()显示下一个视图

三、增加手势
介绍:Android除了提供手势检测之外,还允许应用程序把用户手势(多个持续的触摸事件在屏幕上形成特定的形状)添加到指定的文件中,以备以后使用。如果程序需要,当用户下次再画出该手势时,系统将会识别该手势
手势库:GestureLibraryvoid
1.void addGesture(String entryName,Gesture gesture):添加一个名为entryName的手势
2.Set<String> getGestureEntries():获取该手势库中所有的手势的名称
3.ArrayList<Gesture> getGestures(String entryName):获取entryName名称对应的所有的手势
4.ArrayList<Prediction> recognize(Gesture gesture):从当前手势库中识别与gesture匹配的全部手势

5.void removeEntry(String entryName):删除手势库中entryName对应的手势

代码示例:

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.zking.g150715_android21_gesture.MainActivity">
    <ViewFlipper
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/vf_main_image"
        >
    </ViewFlipper>
</LinearLayout>

----MainAcitvity.java

package com.zking.g150715_android21_gesture;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.widget.ImageView;
import android.widget.Toast;
import android.widget.ViewFlipper;

public class MainActivity extends AppCompatActivity implements GestureDetector.OnGestureListener{

private ViewFlipper vf_main_image;
    private int images[]={R.drawable.s1,R.drawable.s2,R.drawable.s3};
    private GestureDetector gesture;

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        vf_main_image = (ViewFlipper) findViewById(R.id.vf_main_image);

//给ViewFilpper设置适配器(不能)
        for (int i = 0; i < images.length; i++) {
            ImageView iv=new ImageView(this);
            iv.setImageResource(images[i]);
            vf_main_image.addView(iv);
        }
        //实例化一个手势检测器的类
        gesture = new GestureDetector(this,this);
    }

@Override
    public boolean onTouchEvent(MotionEvent event) {
        return gesture.onTouchEvent(event);
    }

@Override
    public boolean onDown(MotionEvent motionEvent) {
        Log.i("test","按下");
        return false;
    }

@Override
    public void onShowPress(MotionEvent motionEvent) {
        Log.i("test","按下,按下但是还没有开始移动");
    }

@Override
    public boolean onSingleTapUp(MotionEvent motionEvent) {
        Log.i("test","按一下");
        return false;
    }

@Override
    public boolean onScroll(MotionEvent motionEvent, MotionEvent motionEvent1, float v, float v1) {
        Log.i("test","滑动");
        return false;
    }

@Override
    public void onLongPress(MotionEvent motionEvent) {
        Log.i("test","长按");
    }

@Override
    public boolean onFling(MotionEvent e1, MotionEvent e2, float v, float v1) {
        if(e1.getX()-e2.getX()>=200){
            Toast.makeText(MainActivity.this, "←←←←←", Toast.LENGTH_SHORT).show();
            vf_main_image.showNext();//下一张

//左出左进
            vf_main_image.setOutAnimation(this,R.anim.left_out);
            vf_main_image.setInAnimation(this,R.anim.left_in);

}else if(e2.getX()-e1.getX()>=200){
            Toast.makeText(MainActivity.this, "→→→→→", Toast.LENGTH_SHORT).show();
            vf_main_image.showPrevious();//上一张
            //右出右进
            vf_main_image.setOutAnimation(this,R.anim.right_out);
            vf_main_image.setInAnimation(this,R.anim.right_in);
        }
        return false;
    }
}

手势(Gesture)相关推荐

  1. Android学习记录(三十)-- Android 关于手势Gesture的简单实现和实践中遇到的问题。

    1.初识gesture: Android提供的手势:GestureDetector.OnGestureListener. If you only want to listen for a subset ...

  2. 关于手势(Gesture)

    随时随地技术实战干货,获取项目源码.学习资料,请关注源代码社区公众号(ydmsq666) 概念:所谓手势,其实是指用户手指或触摸笔在触摸屏上的连续触碰行为,比如在屏幕上从左至右划出的一个动作,就是手势 ...

  3. 《疯狂Android讲义》学习笔记 -- 手势(Gesture)

    前言     所谓手势,其实是指用户手指或触摸笔在触摸屏上的连续触碰行为,比如在屏幕上从左到右划出的一个动作,就是手势:再比如在屏幕上画出一个圆圈也是手势.手势这种连续的触碰会形成某个方向上的移动趋势 ...

  4. firemonkey开发app(手势gesture)

    1.新建multidevic-application工程项目. 2.toolbar+speedbuttonX2+layout->tabcontrol+gesturemanager+actionl ...

  5. HoloLens开发手记 - 手势输入 Gesture input

    手势是HoloLens三个首要输入形式之一.一旦你使用凝视定位了一个全息图像,手势允许你与它交互.手势输入允许你使用手或者点击器原生地与全息图像交互. 手势之外,你也可以在应用中使用语音输入来交互. ...

  6. 【Android游戏开发十七】让玩家自定义手势玩转Android游戏!—Android Gesture之【输入法手势技术】...

    为什么80%的码农都做不了架构师?>>>     李华明Himi 原创,转载务必在明显处注明: 转载自 [黑米GameDev街区] 原文链接:  http://www.himigam ...

  7. 【Android游戏开发十七】让玩家自定义手势玩转Android游戏!—Android Gesture之【输入法手势技术】

    Himi  原创, 欢迎转载,转载请在明显处注明! 谢谢. 原文地址:http://blog.csdn.net/xiaominghimi/archive/2011/01/14/6137136.aspx ...

  8. Android Gesture 手势研究

    怎么理解一个手势,就是在屏幕上,手画一个符号就是一个手势,它代表了用户的一个意图,也就是用户希望程序做点什么,一般程序大多数是通过按钮,按钮上有对应的文字,这样进行人机交互,而手势也是很多地方会使用到 ...

  9. 【Android游戏开发十七】让玩家自定义手势玩转Android游戏!

    本站文章均为 李华明Himi 原创,转载务必在明显处注明: 转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/android-game/340.html   ...

  10. 自定义手势--输入法手势技术

    进行软件开发时,通常我们都喜欢使用较新版本的工具,但这里我为什么使用低版本的SDK来开发Android游戏呢?这里介绍下原因: 1.Android SDK 属于向下兼容!那么低版本可以运行的,高版本基 ...

最新文章

  1. java中的注解(二)
  2. 本科发表6篇SCI论文,获多个荣誉,他刚入学就享受研究生待遇!
  3. linux之find
  4. 【Python】is 和 == 的区别
  5. 测试用什么编译java代码_java – 测试编译器
  6. win11鼠标怎么在轮滑时只滚动一个屏幕 Windows11鼠标设置轮滑只滚动一个屏幕的步骤方法
  7. 《深入浅出MFC》第一、二章笔记
  8. 什么是Servlet?对Servlet技术的浅尝解析
  9. java gbk转机内码_\xd5\xd2\xb2\xbb\xb5\xbd\xd6 gbk内码转中文方法
  10. 我很喜欢电影背后这个看上去很精神分裂的故事,跟影片中那个盘根错节的故事相得益彰。好的艺术作品永远都不可能被简化成纬度单一的说教。
  11. RabbitMQ 快速入门指南
  12. 如何用ftp上传到服务器视频文件,ftp如何将文件上传到服务器上
  13. 就dsaf就打开了撒酒疯
  14. kNN_约会网站匹配效果改进实现代码
  15. AI发展的桎梏在于理解能力?大咖开出的十一条建议「AI前沿」
  16. 公司U07 随机变量视角下的NPV估值 教材笔记
  17. 一天写多少行代码才算是好程序员?
  18. 读取txt的中文字符出现乱码
  19. 为什么现在还有985高校给大一上C语言课?
  20. 【软考中级】多媒体应用设计师复习笔记第六章

热门文章

  1. python模拟正方教务系统登录
  2. neo4j cypher操作
  3. 3.6kw储能逆变器 STM32储能逆变器 BOOST 全桥
  4. ssd用HD软件测试准确吗,真实成绩测试:HD TUNE(去cache)_固态硬盘评测-中关村在线...
  5. MBA面试系列之----中文面试宝典(二)
  6. Workbench材料库
  7. 2022-2-9 Leetcode 925.长按键入
  8. 常见音乐文件格式简单介绍(转)
  9. Anderson《空气动力学基础》5th读书笔记 第3记——流动类型
  10. 西门子SMART LINE触摸屏用户密码失效,无法登录的解决办法