android中使用触屏触控技术和手势识别技术,有许多细节问题,这里整理一下,供大家参考。package com.ethan.touch;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.GestureDetector;
import android.view.GestureDetector.OnGestureListener;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.TextView;
import android.widget.Toast;

/**
* 测试触摸和手势
*
* @author ethan 实现了触控监听和手势监听
*/
public class TouchGestureActivity extends Activity implements OnTouchListener,
OnGestureListener {

private static final String tag = "TouchGestureActivity";

public GestureDetector mGestureDetector;
TextView textView;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

// 初始化手势识别对象,有时候很容易忘记,就会报空指针异常
mGestureDetector = new GestureDetector( this);
textView = (TextView) this.findViewById(R.id.textView);
textView.setOnTouchListener( this);
textView.setLongClickable( true); // 不设置这行,onFling可能监听不到

}

/*
* 触摸事件监听(这里既然用了手势,就需要将触摸事件的event传递给手势的监听)
*/
@Override
public boolean onTouch(View v, MotionEvent event) {
// OnGestureListener will analyzes the given motion event
return mGestureDetector.onTouchEvent(event);
}

/*
* 用户轻触触摸屏,由1个MotionEvent ACTION_DOWN触发
*/
@Override
public boolean onDown(MotionEvent e) {
Log.i(tag, "onDown!");
return false;
}

/*
* 用户按下触摸屏、快速移动后松开,由1个MotionEvent ACTION_DOWN, 多个ACTION_MOVE, 1个ACTION_UP触发
*/
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {

Log.i(tag, "onFling!");
// 参数解释:
// e1:第1个ACTION_DOWN MotionEvent
// e2:最后一个ACTION_MOVE MotionEvent
// velocityX:X轴上的移动速度,像素/秒
// velocityY:Y轴上的移动速度,像素/秒

// 触发条件 :
// X轴的坐标位移大于FLING_MIN_DISTANCE,且移动速度大于FLING_MIN_VELOCITY个像素/秒

int FLING_MIN_DISTANCE = 100;
int FLING_MIN_VELOCITY = 200;

if (e1.getX() - e2.getX() > FLING_MIN_DISTANCE
&& Math.abs(velocityX) > FLING_MIN_VELOCITY) {
// Fling left
Toast.makeText( this, "Fling Left", Toast.LENGTH_SHORT).show();
} else if (e2.getX() - e1.getX() > FLING_MIN_DISTANCE
&& Math.abs(velocityX) > FLING_MIN_VELOCITY) {
// Fling right
Toast.makeText( this, "Fling Right", Toast.LENGTH_SHORT).show();
}

return false;
}

/*
* 用户长按触摸屏,由多个MotionEvent ACTION_DOWN触发
*/
@Override
public void onLongPress(MotionEvent e) {
Log.i(tag, "onLongPress!");
}

/*
* 用户按下触摸屏,并拖动,由1个MotionEvent ACTION_DOWN, 多个ACTION_MOVE触发
*/
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
float distanceY) {
Log.i(tag, "onScroll!");
//参数和onFling里面差不多
return false;
}

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

/*
* 用户(轻触触摸屏后)松开,由一个1个MotionEvent ACTION_UP触发
*/
@Override
public boolean onSingleTapUp(MotionEvent e) {
Log.i(tag, "onSingleTapUp!");
return false;
}

}

更多相关文章

  1. android 登陆、注册、并个指定用户充值
  2. GestureDetector.OnGestureListener 详解以及android手势动作详
  3. Android的滑动手势处理
  4. Android用户看过来,免ROOT和顽固后台拜拜
  5. Android 存储用户信息
  6. android多框架实现短视频应用、3D手势旋转、banner控件、指南针
  7. Android中的手势识别
  8. 【Android 电量优化】JobScheduler 源码分析 ( JobServiceContex
  9. Android GestureDetector手势识别与多点触控探究

随机推荐

  1. Android逐帧动画的简单使用-语音播放效果
  2. Android(安卓)App卡顿慢优化之多线程优化
  3. Kotlin Hello World
  4. Android image的示例 拍照显示
  5. 自己动手写一个简单的Android下拉刷新
  6. Android跨进程通信之小例子(一)
  7. android UI进阶之仿iphone的tab效果 (Andr
  8. Mono for Android(安卓)(1) 之布局
  9. android应用安全——签名机制
  10. Unity3D调用android方法(非插件方式)