安卓编程怎么对class手势监听

 我来答
huanglenzhi
推荐于2016-09-05 · 知道合伙人数码行家
huanglenzhi
知道合伙人数码行家
采纳数:117538 获赞数:517193
长期从事计算机组装,维护,网络组建及管理。对计算机硬件、操作系统安装、典型网络设备具有详细认知。

向TA提问 私信TA
展开全部
  首先介绍一下触屏事件处理的基本思路。触屏一般有三个基本事件,down按下,move移动,up离开,通过对这三个基本事件的监听,判断用户执行了何种操作。一个标准的触屏操作一般都是一系列基本事件的组合,在Android的框架中,通过onTouch()函数可以获取基本的触屏事件,而像onClick这样的函数,已经是一系列基本事件的组合。比如,发生了Down事件,在up事件之前没有发生move事件,或者move的范围很小,并且down事件和up事件的间隔很短,这就是一个click或者singelTap事件,对比实体键盘按键的事件,实体键盘是在down事件发生后进行操作,而触屏事件一般是up事件发生后进行操作。下面是activity的代码
  package com.example.testgesture;

  import android.app.Activity;
  import android.os.Bundle;
  import android.util.Log;
  import android.view.GestureDetector;
  import android.view.GestureDetector.SimpleOnGestureListener;
  import android.view.MotionEvent;
  import android.view.View;
  import android.view.View.OnTouchListener;
  import android.widget.Button;

  public class MainActivity extends Activity {

  private Button mButton;
  private GestureDetector mGestureDetector;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);

  mGestureDetector = new GestureDetector(this, new MyOnGestureListener());

  mButton = (Button) findViewById(R.id.btn_textgesture);
  mButton.setOnTouchListener(new OnTouchListener() {

  @Override
  public boolean onTouch(View v, MotionEvent event) {
  Log.i(getClass().getName(), "onTouch-----" + getActionName(event.getAction()));
  mGestureDetector.onTouchEvent(event);
  // 一定要返回true,不然获取不到完整的事件
  return true;
  }
  });
  }

  private String getActionName(int action) {
  String name = "";
  switch (action) {
  case MotionEvent.ACTION_DOWN: {
  name = "ACTION_DOWN";
  break;
  }
  case MotionEvent.ACTION_MOVE: {
  name = "ACTION_MOVE";
  break;
  }
  case MotionEvent.ACTION_UP: {
  name = "ACTION_UP";
  break;
  }
  default:
  break;
  }
  return name;
  }

  class MyOnGestureListener extends SimpleOnGestureListener {
  @Override
  public boolean onSingleTapUp(MotionEvent e) {
  Log.i(getClass().getName(), "onSingleTapUp-----" + getActionName(e.getAction()));
  return false;
  }

  @Override
  public void onLongPress(MotionEvent e) {
  Log.i(getClass().getName(), "onLongPress-----" + getActionName(e.getAction()));
  }

  @Override
  public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
  Log.i(getClass().getName(),
  "onScroll-----" + getActionName(e2.getAction()) + ",(" + e1.getX() + "," + e1.getY() + ") ,("
  + e2.getX() + "," + e2.getY() + ")");
  return false;
  }

  @Override
  public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
  Log.i(getClass().getName(),
  "onFling-----" + getActionName(e2.getAction()) + ",(" + e1.getX() + "," + e1.getY() + ") ,("
  + e2.getX() + "," + e2.getY() + ")");
  return false;
  }

  @Override
  public void onShowPress(MotionEvent e) {
  Log.i(getClass().getName(), "onShowPress-----" + getActionName(e.getAction()));
  }

  @Override
  public boolean onDown(MotionEvent e) {
  Log.i(getClass().getName(), "onDown-----" + getActionName(e.getAction()));
  return false;
  }

  @Override
  public boolean onDoubleTap(MotionEvent e) {
  Log.i(getClass().getName(), "onDoubleTap-----" + getActionName(e.getAction()));
  return false;
  }

  @Override
  public boolean onDoubleTapEvent(MotionEvent e) {
  Log.i(getClass().getName(), "onDoubleTapEvent-----" + getActionName(e.getAction()));
  return false;
  }

  @Override
  public boolean onSingleTapConfirmed(MotionEvent e) {
  Log.i(getClass().getName(), "onSingleTapConfirmed-----" + getActionName(e.getAction()));
  return false;
  }
  }
  }
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式