键盘事件的响应
在應(yīng)用的程序的控制方面,更多的使用的是屏幕上的控件,但是有的時(shí)候也需要直接對(duì)鍵盤事件來(lái)進(jìn)行響應(yīng)。鍵盤是Android中主要的輸入設(shè)備,對(duì)按鍵的響應(yīng)的處理是響應(yīng)之間在程序中使用鍵盤的核心內(nèi)容。
本例需要實(shí)現(xiàn)的內(nèi)容是通過(guò)鍵盤來(lái)控制屏幕上的一個(gè)圖片的Alpha值,使用上鍵和右鍵增加圖片的Alpha值,使用下鍵和左鍵減少圖片的Alpha值。顯示內(nèi)容如下所示:
本例的布局文件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>
本例包含了一個(gè)文本框和一個(gè)顯示圖片的控件,這樣可以文本框用作顯示當(dāng)前的Alpha的比例值,顯示圖片的控件ImageView用于顯示一個(gè)圖片。
本例的源代碼實(shí)現(xiàn)如下所示:
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()函數(shù)來(lái)獲得按鍵的事件,同類的函數(shù)還包括onKeyUp()函數(shù),其參數(shù)int keyCode為按鍵碼,KeyEvent msg表示按鍵事件的消息(其中包含了更詳細(xì)的內(nèi)容)。
上面打出的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}
基本上通過(guò)keyCode可以獲得是哪一個(gè)按鍵響應(yīng),而通過(guò)msg除了按鍵碼之外,可以獲得按鍵的動(dòng)作(抬起、按下)、重復(fù)信息,掃描碼等內(nèi)容。
KeyEvent主要包含以下一些接口:
final int getAction() // 獲得按鍵的動(dòng)作
final int getFlags() // 獲得標(biāo)志
final int getKeyCode() // 獲得按鍵碼
final int getRepeatCount() // 獲得重復(fù)的信息
final int getScanCode() // 獲得掃描碼
通過(guò)KeyEvent接口,可以獲得按鍵相關(guān)的詳細(xì)信息。
轉(zhuǎn)載于:https://www.cnblogs.com/ruiati/p/3314233.html
總結(jié)
- 上一篇: 中信银联标准IC信用卡怎么样?功能强大权
- 下一篇: 应对信用卡催收的办法 信用卡暴力催收违法