1.View类的常见回调方法
序号 | 方法 | 作用 |
---|---|---|
01 | boolean onKeyDown(int keyCode,KeyEvent event) | 捕捉手机键盘的事件,即键盘码。event为按键事件的对象,封装了触发事件的各种信息 |
02 | boolean onKeyUp(int keyCode,KeyEvent event) | 捕捉手机键盘按键抬起的事件 |
03 | boolean onTouchEvent( MotionEvent) | 触摸事件,包括按下,抬起,滑动 |
04 | boolean onKeyLongPress(int KeyCode,KeyEvent event) | 长按触发事件 |
05 | boolean onKeyShortcut(int KeyCode,KeyEvent event) | 当一个快捷键事件时触发该方法 |
06 | boolean onTrackballEvent(MotionEvent event) | 在组建上触发轨迹球屏事件时触发该方法 |
2.回调方法的返回值
boolean类型的返回值用于表示该方法是否能完全处理该事件,true表示完全处理,不会传播出去,false表示未完全处理,事件会被传播出去
例子:
创建一个事件类完成操作
package com.example.a4_333;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
public class DrawView extends View { //常见DrawView类实现
public float currentX=40; //定义初始位置
public float currentY=40;
public DrawView(Context context) {
super(context);
}
public DrawView(Context context, AttributeSet attrs){
super(context,attrs);
}
public void onDraw(Canvas canvas){ 在画布上定义一个画笔
super.onDraw(canvas);
Paint p=new Paint();
p.setColor(Color.CYAN);
canvas.drawCircle(currentX,currentY,15,p); 画一个圆
}
public boolean onTouchEvent(MotionEvent event){ 实现触摸事件
super.onTouchEvent(event);
currentX=event.getX();
currentY=event.getY();
invalidate();
return true;
}
}
布局文件layout
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<com.example.a4_333.DrawView //创建DrawView组件 完整的包名类名
android:id="@+id/draw"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</FrameLayout>
3.监听的顺序:组件绑定的监听器—事件回调方法—传播到该组件所在的Activity。若果任何一个时间返回true,name该事件不再外传
创建一个layout
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/root">
</FrameLayout>
创建DrawView类实现事件
package com.example.a4_332b;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.MotionEvent;
import android.view.View;
public class DrawView extends View {
public float currentX;
public float currentY;
public DrawView(Context context) {
super(context);
}
public void onDraw(Canvas canvas){
super.onDraw(canvas);
Paint p=new Paint();
p.setColor(Color.CYAN);
canvas.drawCircle(currentX,currentY,15,p);
}
public boolean onTouchEvent(MotionEvent event){
super.onTouchEvent(event);
currentX=event.getX();
currentY=event.getY();
invalidate();
System.out.println("调用了DrawView类的onTouchEvent()回调方法");
return false; //向外传播--2
}
}
package com.example.a4_332b;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.widget.FrameLayout;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
FrameLayout frame=(FrameLayout) findViewById(R.id.root);
final DrawView draw=new DrawView(this);
frame.addView(draw);
draw.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
System.out.println("调用了DrawView类的事件监听方法");
return false; //传播出去--1
}
});
}
public boolean onTouchEvent(MotionEvent event){
super.onTouchEvent(event);
System.out.println("调用了MainActivity的onTouchEvent()回调方法");
return true; //不传播 --3
}
}
如果都是false则一直传播,显示为点击移动,而不是触摸移动。
4.重写onKeyDown()方法,参数KeyCode是指键盘码,可以通过判断返回的Key code是什么数值来判断用户按下的是什么按键
物理按键 | KeyEvent | 说明 |
---|---|---|
电源 | KEYCODE_POWER | 启动或唤醒设备,将界面切换到酸丁的屏幕 |
后退 | KEYCODE_BACK | 返回前一个界面 |
菜单 | KEYCODE_MENU | 显示当前应用的可用菜单 |
HOME键 | KEYCODE_HOME | 返回到HOME界面 |
搜索键 | KEYCODE_SEARCH | 当前应用中启动搜索 |
相机键 | KEYCODE_CAMERA | 启动相机 |
音量键 | KEYCODE_VOLUME_UR KEYCODE_VOLUME_DOWN | 控制上下文音量,例如音乐播放器,手机铃声等 |
方向键 | KEYCODE_DPAD_CENTER/UP/DOWN/LEFT/RIGHT | 某些设备中包含的方向键,用于移动光标等 |
键盘键 | KEYCODE_0…/9…/A…/Z | 数字0-9,字母A-Z等键 |