• 键盘事件的响应


    在应用的程序的控制方面,更多的使用的是屏幕上的控件,但是有的时候也需要直接对键盘事件来进行响应。键盘是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接口,可以获得按键相关的详细信息。

  • 相关阅读:
    学习Faster R-CNN代码roi_pooling(二)
    应用安全
    应用安全
    应用安全
    应用安全
    应用安全
    红队
    应用安全
    应用安全
    应用安全
  • 原文地址:https://www.cnblogs.com/ruiati/p/3314233.html
Copyright © 2020-2023  润新知