安卓按键事件
一、思维结构
二、涉及知识点
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、查看效果