安卓按键事件

安卓按键事件

一、思维结构
在这里插入图片描述

二、涉及知识点
1、线性布局
2、图像视图
(1)图像源 – src
(2)背景 – background
(3)比例类型 – scaleType
3、安卓按键事件处理

三、步骤 (米老鼠)
1、创建安卓应用MoveMickeyByKey
2、准备背景图片background.jpg与米老鼠图片mickey.png,拷贝到mipmap目录里
3、主布局资源文件activity_main.xml
在这里插入图片描述

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/root"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:background="@mipmap/background"
    android:orientation="vertical"
    tools:context="net.hw.movemickeybykey.MainActivity">

    <ImageView
        android:id="@+id/iv_mickey"
        android:layout_width="100dp"
        android:layout_height="120dp"
        android:src="@mipmap/mickey"
        android:scaleType="fitXY"/>


</LinearLayout>


4、主界面类MainActivity
在这里插入图片描述

package net.hw.movemickeybykey;

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

public class MainActivity extends Activity {

    /**
     * 移动图像的步长
     */
    private static final int STEP = 10;

    /**
     *线性根布局
     */
    private LinearLayout root;

    /**
     *米老鼠图像控件
     */
    private ImageView ivMickey;

    /**
     *线性布局的布局参数
     */
    private LinearLayout.LayoutParams layoutParams;

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

        //通过资源标识获得控件实例
        root = findViewById(R.id.root);
        ivMickey = findViewById(R.id.iv_mickey);

        //设置根布局可以获得焦点
        root.setFocusable(true);
        //让根布局获得焦点
        root.requestFocus();

        //获得布局注册的布局参数
        layoutParams = (LinearLayout.LayoutParams) ivMickey.getLayoutParams();

        //给根布局注册按键监听器
        root.setOnKeyListener(new View.OnKeyListener() {
            /**
             *
             * @param v 事件源(event source)
             * @param keyCode 键码
             * @param event 事件
             * @return
             */
            @Override
            public boolean onKey(View v, int keyCode, KeyEvent event) {
                //根据不同按键来修改图像的布局参数
                switch (keyCode){
                    case KeyEvent.KEYCODE_DPAD_UP:
                        layoutParams.topMargin = layoutParams.topMargin - STEP;
                        break;
                    case KeyEvent.KEYCODE_DPAD_DOWN:
                        layoutParams.topMargin = layoutParams.topMargin + STEP;
                        break;
                    case KeyEvent.KEYCODE_DPAD_LEFT:
                        layoutParams.leftMargin = layoutParams.leftMargin - STEP;
                        break;
                    case KeyEvent.KEYCODE_DPAD_RIGHT:
                        layoutParams.leftMargin = layoutParams.leftMargin + STEP;
                        break;
                }

                // 重新设置图像控件的布局参数
                ivMickey.setLayoutParams(layoutParams);


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

    }
}

注:KeyEvent.KEYCODE_DPAD_UP,判断的按键(方向键)属于数字键盘区(DPAD),但是Android Studio自带的模拟器默认是没有支持DPAD,如下图所示:
在这里插入图片描述

要将hw.dPad属性值由默认的no改为yes,关键是如何修改模拟器的配置参数呢?从对话框里知道模拟器配置文件的路径(Path: C:\Users\Administrator.android\avd\Galaxy_Nexus_API_22.avd)
在这里插入图片描述

在这里插入图片描述

然后关闭模拟器,重新启动。

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

猜你喜欢

转载自blog.csdn.net/GB032616/article/details/83820679