键盘事件的响应
在應用的程序的控制方面,更多的使用的是屏幕上的控件,但是有的時候也需要直接對鍵盤事件來進行響應。鍵盤是Android中主要的輸入設備,對按鍵的響應的處理是響應之間在程序中使用鍵盤的核心內容。
本例需要實現的內容是通過鍵盤來控制屏幕上的一個圖片的Alpha值,使用上鍵和右鍵增加圖片的Alpha值,使用下鍵和左鍵減少圖片的Alpha值。顯示內容如下所示:
本例的布局文件testkeyevent.xml如下所示:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/screen"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<TextView android:id="@+id/alphavalue"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"/>
<ImageView android:id="@+id/image"
android:src="@drawable/robot"
android:layout_gravity="center"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
本例包含了一個文本框和一個顯示圖片的控件,這樣可以文本框用作顯示當前的Alpha的比例值,顯示圖片的控件ImageView用于顯示一個圖片。
本例的源代碼實現如下所示:
package com.android.basicapp;
import android.app.Activity;
import android.content.Context;
import android.graphics.*;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.widget.TextView;
import android.widget.ImageView;
public class TestKeyEvent extends Activity {
private static final String TAG = "TestKeyEvent";
private ImageView mImage;
private TextView mAlphavalueText;
private int mAlphavalue;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.testkeyevent);
mImage = (ImageView) findViewById(R.id.image);
mAlphavalueText = (TextView) findViewById(R.id.alphavalue);
mAlphavalue = 100;
?
mImage.setAlpha(mAlphavalue);
mAlphavalueText.setText("Alpha = " + mAlphavalue*100/0xff + "%");
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent msg){
Log.v(TAG, "onKeyDown: keyCode = "+ keyCode);
Log.v(TAG, "onKeyDown: String = " + msg.toString());
switch (keyCode) {
case KeyEvent.KEYCODE_DPAD_UP:
case KeyEvent.KEYCODE_DPAD_RIGHT:
mAlphavalue += 20;
break;
case KeyEvent.KEYCODE_DPAD_DOWN:
case KeyEvent.KEYCODE_DPAD_LEFT:
mAlphavalue -= 20;
break;
default:
break;
}
if(mAlphavalue>=0xFF)mAlphavalue = 0xFF;
if(mAlphavalue<=0x0)mAlphavalue = 0x0;
mImage.setAlpha(mAlphavalue);
mAlphavalueText.setText("Alpha = " + mAlphavalue*100/0xff + "%");
return super.onKeyDown(keyCode, msg);
}
}
本例子使用onKeyDown()函數來獲得按鍵的事件,同類的函數還包括onKeyUp()函數,其參數int keyCode為按鍵碼,KeyEvent msg表示按鍵事件的消息(其中包含了更詳細的內容)。
上面打出的log信息為:
VERBOSE/TestKeyEvent(771): onKeyDown: keyCode = 20
VERBOSE/TestKeyEvent(771): onKeyDown: String = KeyEvent{action=0 code=20 repeat=0 meta=0 scancode=108 mFlags=8}
基本上通過keyCode可以獲得是哪一個按鍵響應,而通過msg除了按鍵碼之外,可以獲得按鍵的動作(抬起、按下)、重復信息,掃描碼等內容。
KeyEvent主要包含以下一些接口:
final int getAction() // 獲得按鍵的動作
final int getFlags() // 獲得標志
final int getKeyCode() // 獲得按鍵碼
final int getRepeatCount() // 獲得重復的信息
final int getScanCode() // 獲得掃描碼
通過KeyEvent接口,可以獲得按鍵相關的詳細信息。
轉載于:https://www.cnblogs.com/ruiati/p/3314233.html
總結
- 上一篇: 中信银联标准IC信用卡怎么样?功能强大权
- 下一篇: 句子中单词首字母大写转换