android 키보드 이벤트 와 화면 이벤트 의 운행 원리 및 상호작용 실현

사용자 정의 View 나 게임 을 할 때 키보드 트리거 이벤트 와 화면 트리거 이 벤트 를 자주 사용 합 니 다!사용자 정의 View 에 있 는 키보드 트리거 이벤트(예 를 들 어 onKeyDown(int keyCode,KeyEvent event)와 화면 트리거 이벤트(onTouchEvent(MotionEvent event)와 activity 에 있 는 키보드 트리거 이벤트(예 를 들 어 onKeyDown(int keyCode,KeyEvent event)와 화면 트리거 이벤트(onTouchEvent(MotionEvent event)는 어떻게 상호작용 을 합 니까?어떤 운행 원리 입 니까?다음은 다음 과 같 습 니 다:1.화면 트리거 이벤트:어떤 activity 나 보기,컨트롤 이 맨 위 에 있 으 면 이 컨트롤 의 화면 트리거 이 벤트 를 가장 먼저 터치 합 니 다.반환 값 이 기본 값 이나 false 라면 한 층 한 층 아래로 전 달 됩 니 다!반환 값 이 true 라면 동작 을 수행 한 후 아래로 전달 되 지 않 습 니 다!2.키보드 트리거 이벤트:이 원 리 는 화면 트리거 이벤트 와 차이 가 많 지 않 지만 다른 경우 컨트롤 이 초점 에 있 을 때 보통 키보드 의 버튼 을 누 르 면 activity 의 키보드 트리거 이벤트(예 를 들 어 onKeyDown(int keyCode,KeyEvent event)를 촉발 합 니 다.다음 예 를 들 어 게임 을 할 때 우 리 는 항상 보 기 를 사용자 정의 합 니 다.우 리 는 보통 이 보기(GameView)의 키보드 트리거 이벤트 와 화면 트리거 이 벤트 를 사용 하 는 것 을 좋아 합 니 다.그러나 예 를 들 어 onKeyDown(int keyCode,KeyEvent event)은 보통 키 보드 를 누 를 때 activity 의 키보드 트리거 이 벤트 를 직접 촉발 합 니 다.어떻게 그것 으로 하여 금(GameView)안의 키보드 트리거 사건 을 직접 촉발 하 게 합 니까?첫 번 째 방법:예 1:
 
View Code
package net.loonggg.project;
import android.app.Activity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.MotionEvent;
public class MainActivity extends Activity {
private GameView gameView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
gameView = new GameView(this);
setContentView(gameView);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
System.out.println("MainActivity:" + " keyCode:" + keyCode + " evnet:"
+ event);
return super.onKeyDown(keyCode, event);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
System.out.println("MainActivity:" + " event:" + event + " x:"
+ event.getX() + " y:" + event.getY());
return super.onTouchEvent(event);
}
}
package net.loonggg.project;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.View;
public class GameView extends View {
private Paint paint;
private int pointX;
private int pointY;
public GameView(Context context) {
super(context);
// GameView
this.setFocusable(true);
paint = new Paint();
paint.setColor(Color.YELLOW);
Thread t = new Thread(new MyThread());
t.start();
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawCircle(pointX, pointY, 15, paint);
}
class MyThread implements Runnable {
@Override
public void run() {
while (true) {
try {
Thread.sleep(3000);
pointY = pointY + 10;
pointX = pointX + 10;
if (pointX > 200) {
break;
}
} catch (InterruptedException e) {
e.printStackTrace();
}
GameView.this.postInvalidate();
}
}
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
System.out.println("GameView:" + " keyCode:" + keyCode + " evnet:"
+ event);
//
return true;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
System.out.println("GameView:" + " event:" + event + " x:"
+ event.getX() + " y:" + event.getY());
//
return true;
}
}
두 번 째 방법:
 
View Code
package net.loonggg.project;
import android.app.Activity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.MotionEvent;
public class MainActivity extends Activity {
private GameView gameView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
gameView = new GameView(this);
setContentView(gameView);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
System.out.println("MainActivity:" + " keyCode:" + keyCode + " evnet:"
+ event);
// gameView
gameView.onKeyDown(keyCode, event);
return super.onKeyDown(keyCode, event);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
System.out.println("MainActivity:" + " event:" + event + " x:"
+ event.getX() + " y:" + event.getY());
// gameView
gameView.onTouchEvent(event);
return super.onTouchEvent(event);
}
}
package net.loonggg.project;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.View;
public class GameView extends View {
private Paint paint;
private int pointX;
private int pointY;
public GameView(Context context) {
super(context);
paint = new Paint();
paint.setColor(Color.YELLOW);
Thread t = new Thread(new MyThread());
t.start();
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawCircle(pointX, pointY, 15, paint);
}
class MyThread implements Runnable {
@Override
public void run() {
while (true) {
try {
Thread.sleep(3000);
pointY = pointY + 10;
pointX = pointX + 10;
if (pointX > 200) {
break;
}
} catch (InterruptedException e) {
e.printStackTrace();
}
GameView.this.postInvalidate();
}
}
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
System.out.println("GameView:" + " keyCode:" + keyCode + " evnet:"
+ event);
return super.onKeyDown(keyCode, event);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
System.out.println("GameView:" + " event:" + event + " x:"
+ event.getX() + " y:" + event.getY());
return super.onTouchEvent(event);
}
}
여기 서 두 번 째 방법 을 추천 합 니 다.첫 번 째 방법 은 시 뮬 레이 터 가 사용 할 수 없 기 때 문 입 니 다!네온 은 줄 에 매 달 려 초췌 하고 벌레 형의 생활 은 네가 없 으 며 프로그램 원숭이 의 세계 만 이 알 수 있다.프로그래머 들,자신의 멋 진 세 계 를 위해 분투 하 라,노력 하 라!파 이 팅!

좋은 웹페이지 즐겨찾기