android(基于回调)的事件处理

基于回调的事件模型:事件源与事件监听是统一的,事件由事件源本身处理。

基于回调的事件处理适合于应付那种事件处理逻辑比较固定的VIew。

Android最先触发控件上绑定的事件监听器。

使用回调机制处理GUI组件上所发生的事件,需要自定义组件类继承GUI组件类,并重写该类的事件处理方法来实现。并且在XML文件中使用自定义组件类。

Android为所有GUI组件都提供了一些事件处理的回调方法,如View类:

1.boolean onKeyDown(int keyCode,keyEvent event):当用户在该组件上按下某个按键时触发该方法。            //键码、事件   对于有键盘的适用

2.boolean onKeyLongPress(int keyCode,keyEvent event):当用户在该组件上长按某个按键时触发该方法。

3.boolean onKeyShortcut(int keyCode,KeyEvent event):当一个键盘快捷键事件发生时触发该方法。

4.boolean onKeyUp(int keyCode,KeyEvent event):当用户在该组件上松开某个按键时触发该方法。

5.boolean onTouchEvent(MotionEvent event):当用户在该组件上触发触摸屏事件时触发该方法。                //对于触屏的适用

6.boolean onTrackballEvent(MotionEvent event):当用户在该组件上触发轨迹球屏事件时触发该方法。

当回调方法返回true时,表明该处理方法已经完全处理该事件,该事件不会传播出去。

当回调方法返回false时,表明该处理方法并未完全处理该事件,该事件会传播出去。

对于基于回调的事件传播而言,某组件上所发生的事情不仅会激发该组件上的回调方法,也会触发该组件所在Activity的回调方法——只要时间能传播到该Activity。

示例:

activity_main

<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"
    android:orientation="vertical" >

    <com.example.huidiao.MyButton
        android:id="@+id/bn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="按钮上的触屏" />

</LinearLayout>

MyButton.java

package com.example.huidiao;

public class MyButton extends Button {

	// AttributeSet是接收xml中定义的属性信息,这不一定是自定义布局,不是自定义布局也有该属性,要不xml中定义的属性信息就无法接收了。
	public MyButton(Context context, AttributeSet set) {
		super(context, set);
	}

	// 重写触屏事件的回调方法
	public boolean onTouchEvent(MotionEvent event) {
		// 事件
		super.onTouchEvent(event);
		Log.v("按钮上触屏事件", "在按钮上的触屏,事件源自己处理");
		return false; // ②
	}
}

MainActivity.java

package com.example.huidiao;

public class MainActivity extends Activity {

	Button bn;

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

		bn = (Button) findViewById(R.id.bn);
		// 为bn绑定事件监听器
		bn.setOnTouchListener(new OnTouchListener() {

			public boolean onTouch(View v, MotionEvent event) {
				// TODO Auto-generated method stub
				Log.v("监听按钮上的触屏事件", "监听器处理按钮上的触屏事件");
				return false; // ①
			}
		});
	}

	// 重写onTouchEvent方法,该方法可监听它所包含的所有控件被触屏事件
	public boolean onTouchEvent(MotionEvent event) {
		// 事件
		super.onTouchEvent(event);
		Log.v("触屏事件传递到Activity", "在自定义按钮上触屏,事件在按钮所在Activity处理");
		return false; // ③
	}
}
时间: 2024-10-10 07:24:56

android(基于回调)的事件处理的相关文章

Android笔记二十四.Android基于回调的事件处理机制

如果说事件监听机制是一种委托式的事件处理,那么回调机制则与之相反,对于基于回调的事件处理模型来说,事件源和事件监听器是统一的,或者说事件监听器完全消失了,当用户在GUI控件上激发某个事件时,控件自己特定的方法将会负责处理该事件. 转载请表明出处:http://blog.csdn.net/u012637501(嵌入式_小J的天空) 一.View类的常见回调方法 为了使用回调机制来处理GUI控件上所发生的事件,需要为该组件提供对应的事件处理方法,而Java又是一种静态语言,我们无法为每个对象动态地添

Android 基于回调的事件处理----事件分发

Android事件处理机制有两种: 基于监听的事件处理 基于回调的事件处理. 基于监听的想必学过java或者接触过Android的都了解,最近看了一下有关回调方面的书,今天主要是想说一下基于回调的事件处理机制.多为我自己的理解总结和借鉴别人的一些东西,有错误或者不理解的地方可以在评论处指出来,谢谢~     基于回调事件处理的做法: 重新Android组件特定的回调方法,或者重写activity的回调方法,Android绝大部分界面组件都提供有事件响应的回调方法,开发者只要重写即可.,一般的,基

Android基础入门教程——3.2 基于回调的事件处理机制

Android基础入门教程--3.2 基于回调的事件处理机制 标签(空格分隔): Android基础入门教程 本节引言 在3.1中我们对Android中的一个事件处理机制--基于监听的事件处理机制进行了学习,简单的说就是 为我们的事件源(组件)添加一个监听器,然后当用户触发了事件后,交给监听器去处理,根据不同的事件 执行不同的操作;那么基于回调的事件处理机制又是什么样的原理呢?好吧,还有一个问题:你知道 什么是方法回调吗?知道吗?相信很多朋友都是了解,但又说不出来吧!好了,带着这些疑问我们 对a

【Android】基于监听的事件处理和基于回调的事件处理、两者的区别

原文:http://blog.csdn.net/zhangzeyuaaa/article/details/40820435 凡是涉及到UI编程,就必然需要进行各种事件处理. Android提供了两套事件处理机制: 1.基于监听的事件处理. 2.基于回调的事件处理. 基于监听的事件处理就是在android的组件上绑定特定的监听器,而基于回调的事件处理就是重写UI组件或者Activity的回调方法. 基于回调的事件处理用于处理一些具有通用性的事件,基于监听的事件处理用于处理与具体业务相关的事件. 事

3.2 基于回调的事件处理机制

3.2 基于回调的事件处理机制 http://www.runoob.com/w3cnote/android-tutorial-callback-event-handle.html 1.什么是方法回调? 答:是将功能定义与功能分开的一种手段,一种解耦合的设计思想;在Java中回调是通过接口来实现的, 作为一种系统架构,必须要有自己的运行环境,且需要为用户提供实现接口;实现依赖于客户,这样就可以 达到接口统一,实现不同,系统通过在不同的状态下"回调"我们的实现类,从而达到接口和实现的分离!

Android学习笔记(36):Android的两种事件处理方式

Android提供了两种事件处理的方式:基于回调的事件处理 和 基于监听的事件处理. 我们来说的容易理解一点: (1)基于回调的事件处理就是继承GUI组件,并重写该组件的事件处理方法.除了一些特定的情况,大部分情况使用基于回调的事件处理方式并不是最好的选择. (2)基于监听的事件处理就是在监听器中定义事件的处理方式,再为组件绑定监听器.这种方式无疑是更能够体现面向对象思想的. 基于回调的事件处理: View类包含如下的方法可以用于重写: boolean onKeyDown(int keyCode

Android笔记二十三.Android基于事件监听器处理机制

转载请表明出处:http://blog.csdn.net/u012637501(嵌入式_小J的天空) 一.Android的事件处理 Android事件处理包括两个部分:Android事件处理机制(基本)和Android消息传递机制(进阶).前者包含三种处理方式,即基于监听的事件处理.基于回调的事件处理.直接绑定到标签;后者包含两种处理方式,即Handler消息传递.异步任务处理. 1.Android的事件处理机制 (1)基于监听的事件处理方式 通常做法是为Android界面组件绑定特定的事件监听

Android基础知识(2)—事件处理

Android事件处理概述 我觉得应用程序需要处理最多的就是用户动作,也就是需要为用户动作提供响应,这种为用户动作提供响应的机制就是事件处理.Android提供了两套事件处理机制: 基于监听的事件处理:主要做法是为Android界面组件绑定特定的事件监听器: 基于回调的事件处理:主要做法是重写Android组件特定的回调方法或者重写Activity的回调方法: 一.基于监听的事件处理: (一)监听的处理模型: 1.Event Source(事件源):事件发生的组件: 2.Event(事件):一次

Android的事件处理机制(一)------基于回调机制的事件处理

Android平台的事件处理机制有两种,一种是基于回调机制的,一种是基于监听接口的,现介绍第一种:基于回调机制的事件处理.Android平台中,每个View都有自己的处理事件的回调方法,开发人员可以通过重写View中的这些回调方法来实现需要的响应事件.当某个事件没有被任何一个View处理时,便会调用Activity中相应的回调方法.Android提供了以下回调方法供用户使用:1. onKeyDown:   功能:该方法是接口KeyEvent.Callback中的抽象方法,所有的View全部实现了