1. 程式人生 > >安卓按鍵事件

安卓按鍵事件

安卓按鍵事件

一、思維結構
在這裡插入圖片描述

二、涉及知識點
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、檢視效果
在這裡插入圖片描述