1.什么是方法回调?
文字表述:
答:是将功能定义与功能分开的一种手段,一种解耦合的设计思想;在Java中回调是通过接口来实现的, 作为一种系统架构,必须要有自己的运行环境,且需要为用户提供实现接口;实现依赖于客户,这样就可以 达到接口统一,实现不同,系统通过在不同的状态下"回调"我们的实现类,从而达到接口和实现的分离!
找了一篇文章,挺不错 https://blog.csdn.net/aigestudio/article/details/40869893
2.Android回调的事件处理机制详解:
在Android中基于回调的事件处理机制使用场景有两个:
1)自定义view
当用户在GUI组件上激发某个事件时,组件有自己特定的方法会负责处理该事件 通常用法:继承基本的GUI组件,重写该组件的事件处理方法,即自定义view 注意:在xml布局中使用自定义的view时,需要使用"全限定类名"
常见View组件的回调方法:
android为GUI组件提供了一些事件处理的回调方法,以View为例,有以下几个方法
①在该组件上触发屏幕事件: boolean onTouchEvent(MotionEvent event);
②在该组件上按下某个按钮时: boolean onKeyDown(int keyCode,KeyEvent event);
③松开组件上的某个按钮时: boolean onKeyUp(int keyCode,KeyEvent event);
④长按组件某个按钮时: boolean onKeyLongPress(int keyCode,KeyEvent event);
⑤键盘快捷键事件发生: boolean onKeyShortcut(int keyCode,KeyEvent event);
⑥在组件上触发轨迹球屏事件: boolean onTrackballEvent(MotionEvent event);
*⑦当组件的焦点发生改变,和前面的6个不同,这个方法只能够在View中重写哦! protected void onFocusChanged(boolean gainFocus, int direction, Rect previously FocusedRect)
MyButton.java
package com.example.test3; import android.content.Context; import android.util.AttributeSet; import android.util.Log; import android.view.KeyEvent; import android.view.MotionEvent; import android.widget.Button; public class MyButton extends Button{ private static String TAG = "呵呵"; public MyButton(Context context, AttributeSet attrs) { super(context, attrs); } //重写键盘按下触发的事件 @Override public boolean onKeyDown(int keyCode, KeyEvent event) { super.onKeyDown(keyCode,event); Log.i(TAG, "onKeyDown方法被调用"); return true; } //重写弹起键盘触发的事件 @Override public boolean onKeyUp(int keyCode, KeyEvent event) { super.onKeyUp(keyCode,event); Log.i(TAG,"onKeyUp方法被调用"); return true; } //组件被触摸了 @Override public boolean onTouchEvent(MotionEvent event) { super.onTouchEvent(event); Log.i(TAG,"onTouchEvent方法被调用"); return true; } }布局文件
<com.example.test3.MyButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/btnshow" android:text="按钮"/>
(2)回调事件传播
代码不贴了,只记录一下传播顺序:传播的顺序是: 监听器--->view组件的回调方法--->Activity的回调方法;
版权声明:《 基于回调的事件处理机制 》为admin原创文章,转载请注明出处!
最后编辑:2022-9-16 15:09:09