亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Android > 正文

android 鍵盤事件和屏幕事件的運行原理及交互實現

2020-04-11 12:35:55
字體:
來源:轉載
供稿:網友
當在自定義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);
}
}

在這里,推薦使用第二種方法,因為第一種方法有的模擬器不能夠使用!
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
成人在线视频福利| 欧美精品videossex88| 8050国产精品久久久久久| 麻豆乱码国产一区二区三区| 97超碰国产精品女人人人爽| 国产有码在线一区二区视频| 欧美性xxxx18| 久久精品国产v日韩v亚洲| 国产成人精品综合| 久久久久久久久综合| 久久影院模特热| 亚洲综合日韩中文字幕v在线| 久久夜色精品国产亚洲aⅴ| 久久影视电视剧免费网站清宫辞电视| 欧美日本精品在线| 日产精品久久久一区二区福利| 成人中文字幕+乱码+中文字幕| 国产精品久久9| 国产亚洲综合久久| 国产偷国产偷亚洲清高网站| 国产精品69精品一区二区三区| 欧美日韩在线视频首页| 国产精品爽爽爽爽爽爽在线观看| 国产精品a久久久久久| 成人美女免费网站视频| 久久久成人的性感天堂| 日韩视频欧美视频| 国产精品久久久久久久久久久久| 国产精品自拍视频| 91久久精品在线| 久久综合五月天| 欧美性xxxx极品hd欧美风情| 日本久久久久久久| 97涩涩爰在线观看亚洲| 日韩精品免费视频| 欧美激情亚洲另类| 欧美性色xo影院| 国产精品久久久久久av下载红粉| 久久综合色影院| 亚洲国产小视频在线观看| 日韩欧美大尺度| 北条麻妃一区二区三区中文字幕| 97精品伊人久久久大香线蕉| 欧美日韩国产精品一区二区不卡中文| 久久激情五月丁香伊人| 日韩小视频在线| 国产精品视频午夜| 久久久精品一区二区三区| 欧美一乱一性一交一视频| 日本高清不卡在线| 国产欧美一区二区三区在线看| 亚洲国产精品系列| 欧美亚洲视频一区二区| 国产精品视频专区| 美女国内精品自产拍在线播放| 一本色道久久综合狠狠躁篇的优点| 国产精品久久久久久av下载红粉| 日韩亚洲国产中文字幕| 成人一区二区电影| 97超碰蝌蚪网人人做人人爽| 日韩免费看的电影电视剧大全| 亚洲成色777777女色窝| 亚洲精品中文字幕女同| 青青久久av北条麻妃海外网| 成人免费看黄网站| 日韩成人av在线| 日韩乱码在线视频| 欧美成人精品h版在线观看| 欧美极品xxxx| 在线观看欧美视频| 国产亚洲人成网站在线观看| 国产精品久在线观看| 日韩av一卡二卡| 在线日韩日本国产亚洲| 6080yy精品一区二区三区| 亚洲精品色婷婷福利天堂| 国产精品日韩电影| 欧美精品videosex性欧美| 日韩成人在线网站| 91久久国产婷婷一区二区| 国产日韩欧美夫妻视频在线观看| 日本精品一区二区三区在线| 日韩成人中文字幕| 成人国产在线激情| 国产视频在线一区二区| 66m—66摸成人免费视频| 国产亚洲视频中文字幕视频| 国产精品大陆在线观看| 在线观看不卡av| 国产91精品高潮白浆喷水| 亚洲精品少妇网址| 日韩欧美一区二区在线| 成人免费网视频| 欧美视频中文字幕在线| 亚洲欧美成人一区二区在线电影| 欧美黑人性猛交| 精品自拍视频在线观看| 国产主播喷水一区二区| 欧美性猛交xxxx免费看| 91香蕉国产在线观看| 欧美肥婆姓交大片| 国产综合视频在线观看| 国产成人精品日本亚洲| 成人中文字幕在线观看| 日韩中文字幕免费看| 色一情一乱一区二区| 国产精品久久久久久av福利软件| 国内免费久久久久久久久久久| 日本中文字幕成人| 国产婷婷成人久久av免费高清| 日韩av大片免费看| 不卡av电影在线观看| 久久在线视频在线| 精品中文字幕在线2019| 国产欧美日韩中文| 欧美日韩午夜剧场| 亚洲成色www8888| 国产福利视频一区二区| 久久精品国产成人精品| 久久久99久久精品女同性| 亚洲xxx视频| 中文字幕欧美日韩精品| 国产精品视频网址| 国模视频一区二区| 日韩中文字幕免费视频| 亚洲电影第1页| 国产成人精品久久二区二区91| 国模gogo一区二区大胆私拍| 2020欧美日韩在线视频| 成人a免费视频| 日韩电影在线观看中文字幕| 精品一区二区电影| 久久影院中文字幕| 成人性生交大片免费看视频直播| 91青草视频久久| 久久精品久久久久久国产 免费| 欧美黑人xxxⅹ高潮交| 91国产一区在线| 成人精品一区二区三区电影免费| 欧美—级a级欧美特级ar全黄| 久久久久久久久久久91| 欧洲美女7788成人免费视频| 久久中文字幕一区| 国产精品自在线| 亚洲精品电影网站| 国产一区二区在线免费| 欧美成人在线免费| 亚洲人a成www在线影院| 国产亚洲精品久久久优势| 国产精品一二三在线| 亚洲变态欧美另类捆绑| 国产精品99久久久久久久久| 亚洲国产精彩中文乱码av在线播放| 亚洲第一福利在线观看| 黑人巨大精品欧美一区二区一视频| 91精品国产精品| 中文字幕亚洲欧美日韩高清| 久久久亚洲国产天美传媒修理工| 中文综合在线观看| 综合136福利视频在线| 欧美激情视频一区| 成人动漫网站在线观看| 国产97在线观看| 日韩中文字幕国产精品|