- 浏览: 64383 次
- 性别:
- 来自: 沈阳
文章分类
最新评论
下午阅读onTouchEvent资料,发现方法调用有点混乱,没有完全按照api讲的执行,故挑了例子测试有MainActivity类和MySurfaceView类,
基本介绍见 http://blog.csdn.net/xiaominghimi/article/details/6127578
包括这个blog前面有关onTouchEvent介绍,
主要代码如下:
MainActivity
[java] view plaincopyprint?
package com.s;
import android.app.Activity;
import android.os.Bundle;
import android.view.MotionEvent;
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new MySurfaceView(this));
}
@Override
public boolean onTouchEvent(MotionEvent event) {
boolean result;
switch (event.getAction()) {
case MotionEvent.ACTION_UP:
result = true;
break;
case MotionEvent.ACTION_DOWN:
result = true;
break;
case MotionEvent.ACTION_CANCEL:
result = true;
break;
case MotionEvent.ACTION_MOVE:
result = false;
break;
default :
result = true;
break;
}
System.out.println("activity touch: " + result);
return result;
}
}
MySurfaceView
[java] view plaincopyprint?
package com.s;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceHolder.Callback;
import android.view.SurfaceView;
/**
*
* @author Himi
*
*/
public class MySurfaceView extends SurfaceView implements Callback, Runnable {
public static MySurfaceView msrv;
private int move_x = 2, x = 20;
private Thread th;
private SurfaceHolder sfh;
private Canvas canvas;
private Paint p;
public MySurfaceView(Context context) {
super(context);
msrv = this;
p = new Paint();
p.setAntiAlias(true);
sfh = this.getHolder();
sfh.addCallback(this);
th = new Thread(this);
this.setKeepScreenOn(true);
this.setFocusable(false);
this.setFocusableInTouchMode(true);
}
int i = 0;
boolean result = false;
@Override
public boolean onTouchEvent(MotionEvent event) {
int key = event.getAction();
switch (key) {
case MotionEvent.ACTION_UP:
result = false;
break;
case MotionEvent.ACTION_DOWN:
result = true;
break;
case MotionEvent.ACTION_CANCEL:
result = true;
break;
case MotionEvent.ACTION_MOVE:
if (i > 0) {
result = false;
}
i++;
break;
default :
result = true;
break;
}
System.out.println("surface touch: " + result);
return result;
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
boolean result = super.onKeyDown(keyCode, event);
System.out.println("surface key : " + result);
return true;
}
public void surfaceCreated(SurfaceHolder holder) {
th.start();
}
public void draw() {
canvas = sfh.lockCanvas();
if (canvas != null) {
canvas.drawColor(Color.WHITE);
canvas.drawText("Surfaceview", x + move_x, 280, p);
sfh.unlockCanvasAndPost(canvas);
}
}
private void logic() {
x += move_x;
if (x > 200 || x < 80) {
move_x = -move_x;
}
}
public void run() {
// TODO Auto-generated method stub
while (true) {
draw();
logic();
try {
Thread.sleep(100);
} catch (Exception ex) {
}
}
}
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
}
public void surfaceDestroyed(SurfaceHolder holder) {
}
}
测试结果:
点击
touchevent-1
touchevent-2
touchevent-3
touchevent-4
MysurfaceView
false - down - 1
备注1
mainActivity
down - 2
up -3
点击
MysurfaceView
true - down - 1
false - up - 2
mainActivity
up - 3
点击
MysurfaceView
true - down - 1
true - up - 2
mainActivity
滑动
MysurfaceView
false - down - 1
mainActivity
down - 2
move - 3
move - 4
up - 5
滑动
MysurfaceView
true - down - 1
false - move - 2
true - move - 4
false - up - 5
mainActivity
move - 3
up - 6
滑动
基本介绍见 http://blog.csdn.net/xiaominghimi/article/details/6127578
包括这个blog前面有关onTouchEvent介绍,
主要代码如下:
MainActivity
[java] view plaincopyprint?
package com.s;
import android.app.Activity;
import android.os.Bundle;
import android.view.MotionEvent;
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new MySurfaceView(this));
}
@Override
public boolean onTouchEvent(MotionEvent event) {
boolean result;
switch (event.getAction()) {
case MotionEvent.ACTION_UP:
result = true;
break;
case MotionEvent.ACTION_DOWN:
result = true;
break;
case MotionEvent.ACTION_CANCEL:
result = true;
break;
case MotionEvent.ACTION_MOVE:
result = false;
break;
default :
result = true;
break;
}
System.out.println("activity touch: " + result);
return result;
}
}
MySurfaceView
[java] view plaincopyprint?
package com.s;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceHolder.Callback;
import android.view.SurfaceView;
/**
*
* @author Himi
*
*/
public class MySurfaceView extends SurfaceView implements Callback, Runnable {
public static MySurfaceView msrv;
private int move_x = 2, x = 20;
private Thread th;
private SurfaceHolder sfh;
private Canvas canvas;
private Paint p;
public MySurfaceView(Context context) {
super(context);
msrv = this;
p = new Paint();
p.setAntiAlias(true);
sfh = this.getHolder();
sfh.addCallback(this);
th = new Thread(this);
this.setKeepScreenOn(true);
this.setFocusable(false);
this.setFocusableInTouchMode(true);
}
int i = 0;
boolean result = false;
@Override
public boolean onTouchEvent(MotionEvent event) {
int key = event.getAction();
switch (key) {
case MotionEvent.ACTION_UP:
result = false;
break;
case MotionEvent.ACTION_DOWN:
result = true;
break;
case MotionEvent.ACTION_CANCEL:
result = true;
break;
case MotionEvent.ACTION_MOVE:
if (i > 0) {
result = false;
}
i++;
break;
default :
result = true;
break;
}
System.out.println("surface touch: " + result);
return result;
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
boolean result = super.onKeyDown(keyCode, event);
System.out.println("surface key : " + result);
return true;
}
public void surfaceCreated(SurfaceHolder holder) {
th.start();
}
public void draw() {
canvas = sfh.lockCanvas();
if (canvas != null) {
canvas.drawColor(Color.WHITE);
canvas.drawText("Surfaceview", x + move_x, 280, p);
sfh.unlockCanvasAndPost(canvas);
}
}
private void logic() {
x += move_x;
if (x > 200 || x < 80) {
move_x = -move_x;
}
}
public void run() {
// TODO Auto-generated method stub
while (true) {
draw();
logic();
try {
Thread.sleep(100);
} catch (Exception ex) {
}
}
}
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
}
public void surfaceDestroyed(SurfaceHolder holder) {
}
}
测试结果:
点击
touchevent-1
touchevent-2
touchevent-3
touchevent-4
MysurfaceView
false - down - 1
备注1
mainActivity
down - 2
up -3
点击
MysurfaceView
true - down - 1
false - up - 2
mainActivity
up - 3
点击
MysurfaceView
true - down - 1
true - up - 2
mainActivity
滑动
MysurfaceView
false - down - 1
mainActivity
down - 2
move - 3
move - 4
up - 5
滑动
MysurfaceView
true - down - 1
false - move - 2
true - move - 4
false - up - 5
mainActivity
move - 3
up - 6
滑动
发表评论
-
android 备用
2014-08-03 13:26 444http://blog.csdn.net/rain_butte ... -
Android中px与dip,sp与dip等的转换工具类(转)
2014-07-16 20:07 600http://www.cnblogs.com/wader201 ... -
android 字体总结
2014-07-15 21:53 548Android提供三种字体:“Sans”,“serif“和“m ... -
mina
2014-07-03 14:12 502http://chwshuang.iteye.com/blog ... -
android获取IMEI
2014-06-17 08:34 534核心代码: Imei = ((TelephonyMan ... -
andorid ui
2014-06-04 22:39 0http://blog.csdn.net/ddddpow/ar ... -
android alarmManage
2014-05-28 21:47 700转自:http://jinguo.iteye.com/bl ... -
adaf
2014-05-27 22:32 0http://www.eoeandroid.com/thr ... -
weixin
2014-05-13 22:42 0android weisixn -
jpajpa
2014-01-28 15:06 508http://www.iteye.com/problems/9 ... -
吉安帕
2014-01-23 22:30 0dfsgdaffgadrgad -
CrudRepository
2013-11-28 19:58 0PagingAndSortingRepository Cr ... -
Android 的第三方报表组件,AChartEngine 案列
2013-08-19 16:48 0http://www.kuaipan.cn/file/id_3 ... -
android sdk adress
2013-08-12 13:23 479developer.android.com/sdk/index ... -
android 结束进程
2013-07-29 22:01 733Android获取apk的版本及包名等信息 http://bl ... -
adnroid 4.0.3去掉虚拟导航栏
2013-07-27 20:54 1030http://blog.csdn.net/wfh1988/ar ... -
andorid全屏
2013-07-27 10:15 791super.onCreate(savedIns ... -
Foursquare
2012-10-12 17:22 0Foursquare -
sqllite brower
2012-09-11 23:05 672http://www.oschina.net/p/sqlite ... -
notice
2012-09-03 21:13 692http://tibaloga.iteye.com/blog/ ...
相关推荐
在Android开发中,触摸事件是用户与应用交互的重要方式,特别是在移动设备上。`onTouchEvent`是处理触摸事件的主要方法,它可以捕捉用户的点击、滑动等手势。本篇将详细讲解如何通过重写`onTouchEvent`来实现上下...
在Android开发中,触摸事件处理是用户界面交互的关键部分。`onTouchEvent`是处理这些事件的核心方法,但其工作机制可能不那么直观。本文将深入解析`onTouchEvent`及相关方法的处理机制,帮助开发者更好地理解和应用...
Android onTouchEvent 自定义滑动布局 Android 中的 onTouchEvent 事件是一种常用的触摸事件处理机制,它可以帮助开发者实现各种滑动布局需求。在本篇文章中,我们将详细介绍如何使用 onTouchEvent 事件来实现一个...
在Android开发中,触摸事件的处理是用户交互的基础,而`onTouchEvent`和`onInterceptTouchEvent`则是处理这些事件的关键方法。这篇文章将深入解析这两个方法的区别和它们在触摸事件处理链中的作用。 首先,`...
`OnTouchEvent`是Android中处理触摸事件的主要方法。当用户与屏幕交互时,系统会传递MotionEvent对象到此方法。我们可以通过分析MotionEvent的动作类型(ACTION_DOWN, ACTION_MOVE, ACTION_UP等)来追踪用户的触控...
在Android开发中,触摸事件处理是用户界面交互的关键部分。`onTouchEvent` 是一个重要的方法,用于接收并处理用户对屏幕的触摸操作。本文将详细介绍`onTouchEvent`中`onTouch`方法的返回值及其影响。 `onTouchEvent...
在Android开发中,触摸事件是用户与应用交互的关键部分,`onTouchEvent`是处理这些事件的主要方法。本篇文章将深入探讨Android中处理`ontouch`事件的三种常见方式:通过接口实现、使用内部类以及利用匿名内部类。...
- Android中的`onTouchEvent`:这是View类中的方法,用于处理触摸事件。它会返回MotionEvent对象,包含了事件类型(ACTION_DOWN, ACTION_MOVE, ACTION_UP等)以及触摸位置等信息。 2. 图形绘制: - iOS中的`...
这篇博客“2011.08.30——— android setOnTouchListener onTouchEvent”主要探讨了如何在Android应用中处理触摸事件,尤其是通过`setOnTouchListener`和`onTouchEvent`方法。下面将详细解析这两个方法的工作原理...
标题中的“android GestureDetector依赖onTouchEvent判断左右滑动”指的是通过`GestureDetector`监听`MotionEvent`的`ACTION_DOWN`, `ACTION_MOVE`和`ACTION_UP`事件,来实现手指在屏幕上左右滑动的识别。...
在Android开发中,`View`的触摸事件处理是至关重要的,特别是当我们需要同时处理点击、长按以及滑动事件时。`OnTouchEvent`是`View`接收触摸输入的主要方法,而`onClick`、`onLongClick`和左右移动事件则是在用户与...
在Android开发中,理解和掌握`onInterceptTouchEvent`与`onTouchEvent`的调用时序至关重要,因为它们是实现触摸事件处理的关键。这两个方法都属于Android的触摸事件处理机制,涉及到了ViewGroup与子View之间的事件...
在Android开发中,触摸事件处理是用户界面交互的关键部分,特别是在构建可触摸设备的应用时。本文将深入探讨`onTouch`和`onClick`事件的关系及其工作原理。 首先,`onTouch`事件是Android中用于处理触摸屏事件的...
1. **重写onTouchEvent**:在Android中,`onTouchEvent`是Activity或View类中的一个方法,用于处理用户与屏幕的触摸交互。当用户在屏幕上进行滑动操作时,系统会连续不断地发送MotionEvent事件到该方法。通过分析...
在Android开发中,触摸事件处理是用户界面交互的关键部分,`onTouchEvent` 和 `onInterceptTouchEvent` 是处理这些事件的两个重要方法。本文将深入探讨这两个方法的使用、顺序以及它们在Android事件分发机制中的角色...
本文将深入探讨Android事件模型,特别是`onTouchEvent`和`interceptTouchEvent`的关系,帮助开发者更好地理解这两个方法如何协同工作以实现复杂的触摸事件处理。 首先,Android事件模型基于触摸事件的分发机制,它...
在Android开发中,触摸事件处理是用户界面交互的基础。`onInterceptTouchEvent`和`onTouchEvent`是两个关键的方法,它们协同工作以处理触摸屏幕的动作。这篇文章将深入探讨这两个方法的调用关系及其在Android事件...