4.1 安卓按键事件

Android进阶之路 - WebView的使用与后退键处理 本篇为大家带来的是WebView的使用方式与讲解,包含WebView的返回上一步操作,因为我们不重写返回键的话,单纯的WebView你按返回键,会直接退出程序,所以我们也会进行简单讲解。 说起来WebView的使用往往给大家带来的印象应该是Android与H5的混合开发,下面为大家进行详细讲解 2018.4.23 因项目需求,扩展了后退键的监听使用,特此修改了文章结构,同时把新的内容补充到了文... 阅读详情

一、简介

  • 曾经手机有物理键,可以根据按键进行响应,这是本讲我们要学习的内容,当然,现在手机取消了物理键,采用完全的触摸屏,后面我们会讲到触屏事件与手势操作。

二、概述

在这里插入图片描述

(一)安卓常用事件

1、单击事件

  • 当用户触碰到某个组件或者方向键被按下时产生该事件,该事件的监听器是View.OnClickListener,事件处理方法是onClick()

2、焦点事件

  • 组件得到或者失去焦点时产生该事件,监听器是View.OnFocusChangeListener,事件处理方法是onFocusChange()

3、按键事件

  • 用户按下或者释放手机键盘上的某个按键时产生,监听器是View.OnKeyListener, 事件处理方法是onKey()

4、触碰事件

  • 手机上具有触屏功能时,触碰屏幕产生该事件,监听器是View.OnTouchListener,事件处理方法是onTouch()

(二)安卓事件处理方式

1、基于回调的事件处理机制

  • 基于回调的事件处理方式,在Activity生命周期那部分已经涉及到了七个回调方法。 (onCreate - onDestroy, onStart - onStop, onResume - onPause, onRestart )

2、基于监听的事件处理机制

  • 注册事件监听器
  • 实现事件监听器接口
  • 编写事件处理代码

(三)案例演示:通过按键移动米老鼠

1、创建安卓应用

  • 基于Empty Activity模板创建安卓应用 - MoveMickeyByKey
    在这里插入图片描述

  • 单击【Finish】按钮
    在这里插入图片描述

2、准备图片素材

  • 将背景图片与米老鼠图片,拷贝到drawable目录里(米老鼠图片背景要镂空)
    在这里插入图片描述

3、字符串资源文件

  • 字符串资源文件 - strings.xml
    在这里插入图片描述
<resources>
    <string name="app_name">通过按键移动米老鼠</string>
</resources>

4、主布局资源文件

  • 主布局资源文件 - activity_main.xml
    在这里插入图片描述

  • 将默认的约束布局改成线性布局,设置相关属性
    在这里插入图片描述

  • 添加一个图像视图,设置相关属性(scaleType - 缩放类型;src - 图像源)
    在这里插入图片描述

  • 查看预览效果
    在这里插入图片描述

  • 手机屏幕坐标系
    在这里插入图片描述

5、主界面类实现功能

  • 主界面类 - MainActivity
    在这里插入图片描述

  • 声明常量和变量
    在这里插入图片描述

  • 通过资源标识符获取控件实例
    在这里插入图片描述

  • 让线性根布局获得焦点
    在这里插入图片描述

  • 获取米老鼠图像控件的布局参数
    在这里插入图片描述

  • 给线性根布局注册按键监听器
    在这里插入图片描述

  • 查看完整源代码

package net.hw.move_mickey_by_key;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;

public class MainActivity extends AppCompatActivity {

    private final int STEP = 10; // 移动步长
    private ImageView ivMickey; // 米老鼠图像控件
    private LinearLayout root; // 线性根布局
    private LinearLayout.LayoutParams layoutParams; // 布局参数

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 利用布局资源文件设置用户界面
        setContentView(R.layout.activity_main);
        // 通过资源标识符获取控件实例
        ivMickey = findViewById(R.id.iv_mickey);
        root = findViewById(R.id.root);
        // 让线性根布局获得焦点
        root.setFocusable(true);
        root.requestFocus();
        // 获取米老鼠图像控件的布局参数
        layoutParams = (LinearLayout.LayoutParams) ivMickey.getLayoutParams();

        // 给线性根布局注册按键监听器,实现监听器接口,编写事件处理方法
        root.setOnKeyListener(new View.OnKeyListener() {
            @Override
            public boolean onKey(View v, int keyCode, KeyEvent event) {
                // 根据按键来修改米老鼠图像控件的布局参数 - 改变图像的位置
                switch (keyCode) {
                    case KeyEvent.KEYCODE_DPAD_UP: // 19, 按上方向键
                        layoutParams.topMargin = layoutParams.topMargin - STEP;
                        break;
                    case KeyEvent.KEYCODE_DPAD_DOWN: // 20, 按下方向键
                        layoutParams.topMargin = layoutParams.topMargin + STEP;
                        break;
                    case KeyEvent.KEYCODE_DPAD_LEFT: // 21, 按左方向键
                        layoutParams.leftMargin = layoutParams.leftMargin - STEP;
                        break;
                    case KeyEvent.KEYCODE_DPAD_RIGHT: // 22, 按右方向键
                        layoutParams.leftMargin = layoutParams.leftMargin + STEP;
                        break;
                }
                // 重新设置米老鼠图像控件的布局参数,改变其位置
                ivMickey.setLayoutParams(layoutParams);

                return false; // 事件要往后传播
            }
        });
    }
}

6、启动应用,查看效果

  • 按上下左右方向键来测试
    在这里插入图片描述

7、代码说明

  • 如果根布局没有获得焦点,那么按键不会移动米老鼠
    在这里插入图片描述

  • 要将图像的布局参数类型转换成线性布局的布局参数
    在这里插入图片描述

  • 布局参数修改之后,一定要图像控件重新设置布局参数
    在这里插入图片描述

(四)常用物理键

1、HOME键

  • keyCode == KeyEvent.KEYCODE_HOME
  • 判断用户是否按下了HOME物理键

2、Back键

  • keyCode == KeyEvent.KEYCODE_BACK
  • 判断用户是否按下了BACK物理键

3、Menu键

  • keyCode == KeyEvent.KEYCODE_MENU

  • 判断用户是否按下了MENU物理键

  • 完成!

安卓开发Android studio学习笔记08:安卓触摸事件 【代码】安卓开发Android studio学习笔记08:安卓触摸事件 阅读详情

相关推荐

Android 监听键盘回车键事件

我们在android手机上面有时候会遇到监听手机软键盘按键的时候,例如:我们在浏览器输入url完毕后可以点击软键盘右下角的“GO”按键加载url页面;在点击搜索框的时候,点击右下角的search符号键可以进行搜索;或者在全部数据输入完毕后,点击右下角的"done"就马上进行下一步操作。

安卓按键事件

基础

XLLLXX的博客 681

Android应用开发中模拟按下HOME键的效果(实现代码)

下面提供代码示例,请参考。 代码如下:public boolean onKeyDown(int keyCode, KeyEvent event) {      if (keyCode == KeyEvent.KEYCODE_BACK) {          Intent intent = new Intent(Intent.ACTION_MAIN);          intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);          intent.addCategory(Intent.CATEGORY_HOME);          startA

Android中的KeyEvent详解

Android中,KeyEvent 是用来表示按键事件的类,可根据对应的事件来处理按键输入,具体包含了关于按键事件的信息,例如按键的代码、动作(按下或释放)以及事件的时间戳,KeyEvent 对象通常在用户与设备上的物理或软件键盘交互时产生,KeyEvent可以帮助开发者创建更加互动和响应式的应用程序

FlyingFish868的博客 6124

android按键响应实例

下面实例中是在一个Activity 中通过上下左右方向键来控制红色小方块的移动,未作边界检测 效果如下: RectControlActivity.java package cie.Rect; import android.app.Activity; import android.os.Bundle; import android.view.Window; import an

fulinwsuafcie的专栏 4386

设置键盘监听器

注意  我们这个地方是在组件上设置一个  按键 监听器      当我们按键盘的时候    就会有监听器监听      如果某个键被按下的时候    就会触发 but.setOnKeyListener(new OnKeyListener() { @Override public boolean onKey(View v, int keyCode, KeyEvent event) {

qqmuhua123的专栏 541

onKeyDown无响应问题

今天研究贪吃蛇安卓代码的时候,发现onKeyDown对按键无反应。 经过调试发现需要加上setFocusable(true);     public void update(){         this.setFocusable(true);         long newTime=System.currentTimeMillis();         if((newTime-old

wizardman2的博客 1519

android贪吃蛇设计报告,基于android的贪吃蛇游戏设计与开发

区别private void Poisonapple(); private void Loveapple();设置退出快捷键在游戏进行中,设置了退出快捷键,可以直接退出游戏,更加方便玩家操作。 具体实现还是依靠键盘响应函数:游戏中是数字“1”键作为退出快捷键 public boolean onKeyDown(int keyCode,KeyEvent event) if(keyCode == K...

weixin_33438788的博客 762

安卓处理机制之onTouchaction

package com.lay1; import android.app.Activity; import android.os.Bundle; import android.view.KeyEvent; import android.view.MotionEvent; import android.view.View; import android.view.View.OnClickListen

我的编程路-精致技术 717

Android 应用响应智能电视遥控器

前言 由于最近的项目需要运行在安卓智能电视上,除了正常的功能开发外,为了操作方便还需要对遥控器进行支持。这里记录对遥控器支持的主要思路。 原理支持 Android设备对遥控器的响应是通过分发KeyEvent的方式进行的,体现在界面上是focus焦点在view间的移动等。 因此,我们可以从两方面入手,一是拦截系统事件分发过程,二是借助系统提供的属性实现焦点移动。 具体实现 方案一 拦截系统事件分发过...

dnsliu的博客 6748

Frame动画xml

package frame.yb; import android.content.Context; import android.graphics.drawable.AnimationDrawable; import android.view.KeyEvent; import android.view.View; import android.widget.ImageView; /** *

991

控制飞机的移动

/*  * 控制飞机的移动  * 游戏中的飞机会随用户单击键盘的动作而移动  */ import 略 public class Ex003_01Activity extends Activity { // 飞机移动的速度 private int speed = 12; /** Called when the activity is first created. */

Jasonzhou613的专栏 1066

cocos2d-x中添加Enter键和方向键按键响应

转载自:http://blog.csdn.net/dj0379/article/details/17163629

宁静致远 1102

android之响应的系统设置的事件

1、Configuration类专门用于描述手机设备上的配置信息,这些配置信息既包括用户特定的也包括系统的动态设备配置。 程序可调用Activity的如下方法来获取 系统的Configuration对象: Configuration cfg=getResources().getConfiguration(); String screen = cfg.orientation == Config

任海丽(3G/移动开发) 8546

Android之响应的系统设置的事件

1、Configuration类专门用于描述手机设备上的配置信息,这些配置信息既包括用户特定的也包括系统的动态设备配置。 程序可调用Activity的如下方法来获取 系统的Configuration对象: Configuration cfg=getResources().getConfiguration(); String screen = cfg.orientation == Config

2438

Android Studio 笔记4.1 安卓按键事件

Android Studio 笔记4.1 安卓按键事件

ZQIR12的博客 363

安卓电视遥控器秒变智能鼠标:MATVT让你的电视操控更自由

还在为安卓电视上浏览网页、操作复杂应用而烦恼吗?传统遥控器的方向键导航效率低下,点击链接困难重重。现在,MATVT这款开源神器能让你的普通遥控器瞬间拥有鼠标功能,彻底改变电视交互体验!无论是网页浏览优化、复杂应用操作,还是游戏体验提升,这款智能操控工具都能轻松应对。 ## 🎯 为什么你的电视需要虚拟鼠标? **真实用户故事:** > "我用安卓电视看视频网站时,总是点不准那些小小的按钮。自从

gitblog_01046的博客 1456
上一篇: 3.3 网格布局
下一篇: 4.2 安卓触摸事件
GE_GUANYI
博客等级 码龄5年 5粉丝 18原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值