安卓界面事件

刺骨的言语ヽ痛彻心扉 2024-04-01 18:16 228阅读 0赞

文章目录

  • 一、学习要点
  • 二、案例演示
    • 1、案例演示
    • 2、装备图片素材
    • 3、字符串资源文件
    • 4、主布局资源文件
    • 5、主界面类
    • 6、常用物理键
      • 1、HOME键
      • 2、Back键
      • 3、Menu键
    • 7、吐司提示

一、学习要点

  1. 安卓界面事件
  2. 安卓事件处理方式
  3. 常用物理键

二、案例演示

1、案例演示

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

2、装备图片素材

在这里插入图片描述

  • 拷贝到drawable目录中
    在这里插入图片描述

3、字符串资源文件

  • strings.xml
    在这里插入图片描述


    通过按键移动图片

4、主布局资源文件

  • activity_main.xml
    在这里插入图片描述
  • 约束布局改成线性布局并设置相应属性
    在这里插入图片描述
  • 添加一个图像视图
    在这里插入图片描述
  • 预览效果
    在这里插入图片描述

5、主界面类

  • MainActivity
    在这里插入图片描述
  • 声明常量和变量
    在这里插入图片描述
  • 通过资源标识符获取控件实例
    在这里插入图片描述
  • 让线性根布局获得焦点
    在这里插入图片描述
  • 获取图像控件的布局参数
    在这里插入图片描述
  • 给线性根布局注册按键监听器
    在这里插入图片描述

    package net.hxl.move_mickey_by_key;

    import androidx.annotation.RequiresApi;
    import androidx.appcompat.app.AppCompatActivity;

    import android.os.Build;
    import android.os.Bundle;
    import android.util.DisplayMetrics;
    import android.util.Log;
    import android.view.KeyEvent;
    import android.view.View;
    import android.widget.ImageView;
    import android.widget.LinearLayout;
    import android.widget.Toast;

    public class MainActivity extends AppCompatActivity {

    1. // 声明常量和变量
    2. protected int STEP = 10;//步长
    3. private ImageView ivMickey; //米老鼠图像控件
    4. private LinearLayout root; // 线性根布局
    5. private LinearLayout.LayoutParams layoutParams;//布局参数
    6. private int screenWidth;//手机屏幕宽度
    7. private int screenHeight;//手机屏幕高度

    // @RequiresApi(api = Build.VERSION_CODES.R)

    1. @Override
    2. protected void onCreate(Bundle savedInstanceState) {
    3. super.onCreate(savedInstanceState);
    4. // 利用布局资源文件设置用户界面
    5. setContentView(R.layout.activity_main);
    6. // 通过资源索引获得控件实例
    7. ivMickey = findViewById(R.id.iv_mickey);
    8. root = findViewById(R.id.root);
    9. // 设置根布局可以获得焦点
    10. root.setFocusable(true);//启用
    11. // 让根布局获得焦点
    12. root.requestFocus();//请求
    13. // 获取米老鼠图像控件的布局参数
    14. layoutParams = (LinearLayout.LayoutParams) ivMickey.getLayoutParams();
    15. // 给线性根布局注册按键监听器,实现监听器接口,编写事件处理方法
    16. root.setOnKeyListener(new View.OnKeyListener() {
    17. @Override
    18. public boolean onKey(View v, int keyCode, KeyEvent event) {
    19. // 根据按键来修改米老鼠图像控件的布局参数 - 改变图像的位置
    20. switch (keyCode) {
    21. case KeyEvent.KEYCODE_DPAD_UP: // 19, 按上方向键
    22. layoutParams.topMargin = layoutParams.topMargin - STEP;
    23. break;
    24. case KeyEvent.KEYCODE_DPAD_DOWN: // 20, 按下方向键
    25. layoutParams.topMargin = layoutParams.topMargin + STEP;
    26. break;
    27. case KeyEvent.KEYCODE_DPAD_LEFT: // 21, 按左方向键
    28. layoutParams.leftMargin = layoutParams.leftMargin - STEP;
    29. break;
    30. case KeyEvent.KEYCODE_DPAD_RIGHT: // 22, 按右方向键
    31. layoutParams.leftMargin = layoutParams.leftMargin + STEP;
    32. break;
    33. }
    34. // 重新设置米老鼠图像控件的布局参数,改变其位置
    35. ivMickey.setLayoutParams(layoutParams);
    36. return false; // 事件要往后传播
    37. }
    38. });
    39. }

    }

  • 启动程序,查看效果

在这里插入图片描述

6、常用物理键

1、HOME键

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

2、Back键

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

3、Menu键

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

7、吐司提示

在这里插入图片描述

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

    package net.hxl.move_mickey_by_key;

    import androidx.annotation.RequiresApi;
    import androidx.appcompat.app.AppCompatActivity;

    import android.os.Build;
    import android.os.Bundle;
    import android.util.DisplayMetrics;
    import android.util.Log;
    import android.view.KeyEvent;
    import android.view.View;
    import android.widget.ImageView;
    import android.widget.LinearLayout;
    import android.widget.Toast;

    public class MainActivity extends AppCompatActivity {

    1. // 声明常量和变量
    2. protected int STEP = 10;//步长
    3. private ImageView ivMickey; //米老鼠图像控件
    4. private LinearLayout root; // 线性根布局
    5. private LinearLayout.LayoutParams layoutParams;//布局参数
    6. private int screenWidth;//手机屏幕宽度
    7. private int screenHeight;//手机屏幕高度
    8. @RequiresApi(api = Build.VERSION_CODES.R)
    9. @Override
    10. protected void onCreate(Bundle savedInstanceState) {
    11. super.onCreate(savedInstanceState);
    12. // 利用布局资源文件设置用户界面
    13. setContentView(R.layout.activity_main);
    14. // 通过资源索引获得控件实例
    15. ivMickey = findViewById(R.id.iv_mickey);
    16. root = findViewById(R.id.root);
    17. // 设置根布局可以获得焦点
    18. root.setFocusable(true);//启用
    19. // 让根布局获得焦点
    20. root.requestFocus();//请求
    21. // 获取米老鼠图像控件的布局参数
    22. layoutParams = (LinearLayout.LayoutParams) ivMickey.getLayoutParams();
    23. // 获取跟布局的布局参数
    24. // 获取手机屏幕尺寸
    25. screenWidth = getWindowManager().getCurrentWindowMetrics().getBounds().width();
    26. screenHeight = getWindowManager().getCurrentWindowMetrics().getBounds().height();
    27. // 给线性根布局注册监听器,实现监听器接口,编写事件处理方法
    28. root.setOnKeyListener(new View.OnKeyListener() {
    29. @Override
    30. public boolean onKey(View v, int keyCode, KeyEvent event) {
    31. // 根据按键修改图像控件的布局参数 - 改变图像的位置
    32. switch (keyCode) {
    33. case KeyEvent.KEYCODE_DPAD_UP: // 19,按上方向键
    34. // 上边界碰撞检测
    35. if (ivMickey.getTop() >= 10){
    36. layoutParams.topMargin = layoutParams.topMargin - STEP;
    37. }else {
    38. Toast.makeText(MainActivity.this, "温馨提示:碰到上边界~", Toast.LENGTH_SHORT).show();
    39. }
    40. break;
    41. case KeyEvent.KEYCODE_DPAD_DOWN: // 20,按下方向键
    42. if (ivMickey.getTop() <= 1500 ){
    43. layoutParams.topMargin = layoutParams.topMargin + STEP;
    44. }else{
    45. Toast.makeText(MainActivity.this, "温馨提示:碰到下边界~", Toast.LENGTH_SHORT).show();
    46. }
    47. break;
    48. case KeyEvent.KEYCODE_DPAD_LEFT: // 21,按左方向键
    49. if (ivMickey.getLeft() >= 10){
    50. layoutParams.leftMargin = layoutParams.leftMargin - STEP;
    51. }else {
    52. Toast.makeText(MainActivity.this, "碰到左边界~", Toast.LENGTH_SHORT).show();
    53. }
    54. break;
    55. case KeyEvent.KEYCODE_DPAD_RIGHT: // 22,按右方向键
    56. if (ivMickey.getLeft() <= 800){
    57. layoutParams.leftMargin = layoutParams.leftMargin + STEP;
    58. }else {
    59. Toast.makeText(MainActivity.this, "碰到右边界~", Toast.LENGTH_SHORT).show();
    60. }
    61. break;
    62. }
    63. // 重新设置图像控件的布局参数,改变其位置
    64. ivMickey.setLayoutParams(layoutParams);
    65. return false;//事件要往后传播
    66. }
    67. });
    68. }

    }

发表评论

表情:
评论列表 (有 0 条评论,228人围观)

还没有评论,来说两句吧...

相关阅读

    相关 笔记13.触摸事件

    目录 零、学习目标 一、安卓触摸事件概述 1、触摸分类 (1)单点触摸 (2)多点触摸 2、触摸动作 3、触摸监听器 4、触摸方法 5、触点个数与坐标 二、