Hi all,
I am trying to write a map application based on the MapView, and I
need to handle the UP/DOWN/LEFT/RIGHT keys.
At first, I tried to implement with setOnKeyListener, please take a
look at he following code.
mapView = (MapView) findViewById(R.id.mapview);
// set on key listener
mapView.setOnKeyListener(onKeyListener);
// Inner class for OnKeyListener
final private OnKeyListener onKeyListener = new OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
boolean ret = false;
Log.i("SuperMap", "event.getAction()=" + event.getAction());
Log.i("SuperMap", "keyCode=" + keyCode);
if (event.getAction() == KeyEvent.ACTION_DOWN) // key pressed
down
switch (keyCode) {
case KeyEvent.KEYCODE_DPAD_UP:
Toast.makeText(SuperMap.this, "UP",
Toast.LENGTH_SHORT)
.show();
ret = true;
break;
case KeyEvent.KEYCODE_DPAD_DOWN:
Toast.makeText(SuperMap.this, "DOWN",
Toast.LENGTH_SHORT)
.show();
ret = true;
break;
case KeyEvent.KEYCODE_DPAD_LEFT:
Toast.makeText(SuperMap.this, "LEFT",
Toast.LENGTH_SHORT)
.show();
ret = true;
break;
case KeyEvent.KEYCODE_DPAD_RIGHT:
Toast.makeText(SuperMap.this, "RIGHT",
Toast.LENGTH_SHORT)
.show();
ret = true;
break;
default:
// do nothing here
ret = false;
break;
}
else {
// do nothing when key released or multiple keys
pressed at the
// same time
ret = false;
}
return ret;
}
};
It compiles OK, but does not works (there isn't any log in Logcat,
seems it does not receive any key press event).
Later, I tried to use the onKeyDown() function, so no setOnKeyListener
() is needed, and all I need is just the following function which
override the one in the super class.
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
boolean ret = false;
Log.i("SuperMap", "event.getAction()=" + event.getAction());
Log.i("SuperMap", "keyCode=" + keyCode);
if (event.getAction() == KeyEvent.ACTION_DOWN) // key pressed down
switch (keyCode) {
case KeyEvent.KEYCODE_DPAD_UP:
Toast.makeText(SuperMap.this, "UP",
Toast.LENGTH_SHORT).show();
ret = true;
break;
case KeyEvent.KEYCODE_DPAD_DOWN:
Toast.makeText(SuperMap.this, "DOWN",
Toast.LENGTH_SHORT)
.show();
ret = true;
break;
case KeyEvent.KEYCODE_DPAD_LEFT:
Toast.makeText(SuperMap.this, "LEFT",
Toast.LENGTH_SHORT)
.show();
ret = true;
break;
case KeyEvent.KEYCODE_DPAD_RIGHT:
Toast.makeText(SuperMap.this, "RIGHT",
Toast.LENGTH_SHORT)
.show();
ret = true;
break;
default:
// do nothing here
ret = false;
break;
}
else {
// do nothing when key released or multiple keys pressed at the
// same time
ret = false;
}
return ret;
}
This time, it works, but I am confused.
According to my understanding, they are almost the same.
Anybody knows why?
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en
-~----------~----~----~----~------~----~------~--~---