`

android ontouchevent

 
阅读更多
下午阅读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

滑动





















分享到:
评论

相关推荐

    安卓onTouchEvent上下左右滑动事件

    在Android开发中,触摸事件是用户与应用交互的重要方式,特别是在移动设备上。`onTouchEvent`是处理触摸事件的主要方法,它可以捕捉用户的点击、滑动等手势。本篇将详细讲解如何通过重写`onTouchEvent`来实现上下...

    android onTouchEvent处理机制总结(必看)

    在Android开发中,触摸事件处理是用户界面交互的关键部分。`onTouchEvent`是处理这些事件的核心方法,但其工作机制可能不那么直观。本文将深入解析`onTouchEvent`及相关方法的处理机制,帮助开发者更好地理解和应用...

    Android运用onTouchEvent自定义滑动布局

    Android onTouchEvent 自定义滑动布局 Android 中的 onTouchEvent 事件是一种常用的触摸事件处理机制,它可以帮助开发者实现各种滑动布局需求。在本篇文章中,我们将详细介绍如何使用 onTouchEvent 事件来实现一个...

    浅谈Android onTouchEvent 与 onInterceptTouchEvent的区别详解

    在Android开发中,触摸事件的处理是用户交互的基础,而`onTouchEvent`和`onInterceptTouchEvent`则是处理这些事件的关键方法。这篇文章将深入解析这两个方法的区别和它们在触摸事件处理链中的作用。 首先,`...

    Android简易画板PaintOnTouchEvent

    `OnTouchEvent`是Android中处理触摸事件的主要方法。当用户与屏幕交互时,系统会传递MotionEvent对象到此方法。我们可以通过分析MotionEvent的动作类型(ACTION_DOWN, ACTION_MOVE, ACTION_UP等)来追踪用户的触控...

    Android onTouchEvent事件中onTouch方法返回值(介绍)

    在Android开发中,触摸事件处理是用户界面交互的关键部分。`onTouchEvent` 是一个重要的方法,用于接收并处理用户对屏幕的触摸操作。本文将详细介绍`onTouchEvent`中`onTouch`方法的返回值及其影响。 `onTouchEvent...

    Android ontouch事件处理的三种方式

    在Android开发中,触摸事件是用户与应用交互的关键部分,`onTouchEvent`是处理这些事件的主要方法。本篇文章将深入探讨Android中处理`ontouch`事件的三种常见方式:通过接口实现、使用内部类以及利用匿名内部类。...

    利用touch触摸事件实现画板画画功能

    - Android中的`onTouchEvent`:这是View类中的方法,用于处理触摸事件。它会返回MotionEvent对象,包含了事件类型(ACTION_DOWN, ACTION_MOVE, ACTION_UP等)以及触摸位置等信息。 2. 图形绘制: - iOS中的`...

    2011.08.30——— android setOnTouchListener onTouchEvent

    这篇博客“2011.08.30——— android setOnTouchListener onTouchEvent”主要探讨了如何在Android应用中处理触摸事件,尤其是通过`setOnTouchListener`和`onTouchEvent`方法。下面将详细解析这两个方法的工作原理...

    android GestureDetector依赖onTouchEvent判断左右滑动

    标题中的“android GestureDetector依赖onTouchEvent判断左右滑动”指的是通过`GestureDetector`监听`MotionEvent`的`ACTION_DOWN`, `ACTION_MOVE`和`ACTION_UP`事件,来实现手指在屏幕上左右滑动的识别。...

    android view OnTouchEvent 中同时处理 onClick,onLongClick,和左右移动事件

    在Android开发中,`View`的触摸事件处理是至关重要的,特别是当我们需要同时处理点击、长按以及滑动事件时。`OnTouchEvent`是`View`接收触摸输入的主要方法,而`onClick`、`onLongClick`和左右移动事件则是在用户与...

    android事件2-onInterceptTouchEvent和onTouchEvent调用时序

    在Android开发中,理解和掌握`onInterceptTouchEvent`与`onTouchEvent`的调用时序至关重要,因为它们是实现触摸事件处理的关键。这两个方法都属于Android的触摸事件处理机制,涉及到了ViewGroup与子View之间的事件...

    详谈Android中onTouch与onClick事件的关系(必看)

    在Android开发中,触摸事件处理是用户界面交互的关键部分,特别是在构建可触摸设备的应用时。本文将深入探讨`onTouch`和`onClick`事件的关系及其工作原理。 首先,`onTouch`事件是Android中用于处理触摸屏事件的...

    博客园项目(重写onTouchEvent实现滑屏显示菜单)

    1. **重写onTouchEvent**:在Android中,`onTouchEvent`是Activity或View类中的一个方法,用于处理用户与屏幕的触摸交互。当用户在屏幕上进行滑动操作时,系统会连续不断地发送MotionEvent事件到该方法。通过分析...

    onTouchEvent 、onInterceptTouchEvent的顺序~

    在Android开发中,触摸事件处理是用户界面交互的关键部分,`onTouchEvent` 和 `onInterceptTouchEvent` 是处理这些事件的两个重要方法。本文将深入探讨这两个方法的使用、顺序以及它们在Android事件分发机制中的角色...

    Android事件模型之interceptTouchEvnet ,onTouchEvent关系正解

    本文将深入探讨Android事件模型,特别是`onTouchEvent`和`interceptTouchEvent`的关系,帮助开发者更好地理解这两个方法如何协同工作以实现复杂的触摸事件处理。 首先,Android事件模型基于触摸事件的分发机制,它...

    onInterceptTouchEvent和onTouchEvent调用关系详解

    在Android开发中,触摸事件处理是用户界面交互的基础。`onInterceptTouchEvent`和`onTouchEvent`是两个关键的方法,它们协同工作以处理触摸屏幕的动作。这篇文章将深入探讨这两个方法的调用关系及其在Android事件...

Global site tag (gtag.js) - Google Analytics