欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

android 鍵盤(pán)事件和屏幕事件的運(yùn)行原理及交互實(shí)現(xiàn)

 更新時(shí)間:2013年01月09日 10:50:04   作者:  
當(dāng)在自定義View或者做游戲的時(shí)候,我們常常會(huì)用到鍵盤(pán)觸發(fā)事件和屏幕觸發(fā)事件!在自定義的View里的鍵盤(pán)觸發(fā)事件和屏幕觸發(fā)事件和activity里的鍵盤(pán)觸發(fā)事件和屏幕觸發(fā)事件是怎么樣交互的呢,接下來(lái)為您詳細(xì)介紹,感興趣的朋友可以了解下哦
當(dāng)在自定義View或者做游戲的時(shí)候,我們常常會(huì)用到鍵盤(pán)觸發(fā)事件和屏幕觸發(fā)事件!在自定義的View里的鍵盤(pán)觸發(fā)事件(比如:onKeyDown(int keyCode, KeyEvent event))和屏幕觸發(fā)事件(onTouchEvent(MotionEvent event))和activity里的鍵盤(pán)觸發(fā)事件(比如:onKeyDown(int keyCode, KeyEvent event))和屏幕觸發(fā)事件(onTouchEvent(MotionEvent event))是怎么樣交互的呢?是怎樣的一個(gè)運(yùn)行原理呢?下面來(lái)看看:

1、屏幕觸發(fā)事件:哪個(gè)activity或者視圖,控件在最上層就最先觸發(fā)這個(gè)控件里的屏幕觸發(fā)事件,返回值如果是默認(rèn)或者false就會(huì)一層一層的往下傳遞!如果返回值是true,則在執(zhí)行完動(dòng)作之后不會(huì)往下傳遞!
2、鍵盤(pán)觸發(fā)事件:這個(gè)原理和屏幕觸發(fā)事件差不多,但是不同的時(shí),在沒(méi)有設(shè)置控件處于焦點(diǎn)時(shí),一般按鍵盤(pán)里的按鍵觸發(fā)的是activity里的鍵盤(pán)觸發(fā)事件(比如:onKeyDown(int keyCode, KeyEvent event))。

下面來(lái)舉個(gè)例子
比如在做游戲的時(shí)候,我們經(jīng)常自定義視圖,我們一般都喜歡和使用觸發(fā)本視圖(GameView)里的鍵盤(pán)觸發(fā)事件和屏幕觸發(fā)事件,但是比如:onKeyDown(int keyCode, KeyEvent event)),一般我們按鍵盤(pán)的時(shí)候直接觸發(fā)的是activity里的鍵盤(pán)觸發(fā)事件,怎樣讓它直接觸發(fā)(GameView)里的鍵盤(pán)觸發(fā)事件呢?

第一種方法
例子1:
復(fù)制代碼 代碼如下:

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);
// 設(shè)置GameView獲得焦點(diǎn)
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);
//此事件不會(huì)傳播出去
return true;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
System.out.println("GameView:" + " event:" + event + " x:"
+ event.getX() + " y:" + event.getY());
//此事件不會(huì)傳播出去
return true;
}
}

第二種方法
復(fù)制代碼 代碼如下:

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);
}
}

在這里,推薦使用第二種方法,因?yàn)榈谝环N方法有的模擬器不能夠使用!
囧神的世界你不懂,蟲(chóng)哥的生活你沒(méi)有,只有程序猿的世界大家才知道。程序猿們,為了自己的精彩世界奮斗吧,努力吧!加油……

相關(guān)文章

  • Android獲得當(dāng)前正在顯示的activity類名的方法

    Android獲得當(dāng)前正在顯示的activity類名的方法

    這篇文章主要介紹了Android獲得當(dāng)前正在顯示的activity類名的方法,分析了權(quán)限的修改與Java代碼的實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-01-01
  • Android應(yīng)用程序簽名步驟及相關(guān)知識(shí)介紹

    Android應(yīng)用程序簽名步驟及相關(guān)知識(shí)介紹

    本文主要介紹Android應(yīng)用程序簽名相關(guān)的理論知識(shí),包括:什么是簽名、為什么要給應(yīng)用程序簽名、如何給應(yīng)用程序簽名等,感興趣的朋友可以參考下哈
    2013-04-04
  • Kotlin中的contract到底有什么用詳解

    Kotlin中的contract到底有什么用詳解

    Kotlin contracts是一種通知編譯器有關(guān)函數(shù)行為的方式,下面這篇文章主要給大家介紹了關(guān)于Kotlin中contract到底有什么用的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-01-01
  • android開(kāi)發(fā)之關(guān)閉所有的activity的方法

    android開(kāi)發(fā)之關(guān)閉所有的activity的方法

    本篇文章主要介紹了android開(kāi)發(fā)之關(guān)閉所有的activity的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-12-12
  • Android開(kāi)發(fā)中GridView用法示例

    Android開(kāi)發(fā)中GridView用法示例

    這篇文章主要介紹了Android開(kāi)發(fā)中GridView用法,簡(jiǎn)單說(shuō)明了GridView控件的功能并結(jié)合實(shí)例形式給出了GridView組合圖片顯示的具體功能實(shí)現(xiàn)方法與布局操作技巧,需要的朋友可以參考下
    2017-10-10
  • Android實(shí)現(xiàn)Ant Design 自定義表單組件

    Android實(shí)現(xiàn)Ant Design 自定義表單組件

    Ant Design 組件提供了Input,InputNumber,Radio,Select,uplod等表單組件,下面通過(guò)本文給大家詳細(xì)介紹Android實(shí)現(xiàn)Ant Design 自定義表單組件,需要的的朋友參考下吧
    2017-06-06
  • Android 7.0 運(yùn)行時(shí)權(quán)限彈窗問(wèn)題的解決

    Android 7.0 運(yùn)行時(shí)權(quán)限彈窗問(wèn)題的解決

    這篇文章主要介紹了Android 7.0 運(yùn)行時(shí)權(quán)限彈窗問(wèn)題的解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • Android注解ButterKnife的基本使用

    Android注解ButterKnife的基本使用

    這篇文章主要介紹了Android注解ButterKnife的基本使用的相關(guān)資料,需要的朋友可以參考下
    2017-01-01
  • Android Activity跳轉(zhuǎn)動(dòng)畫(huà)效果

    Android Activity跳轉(zhuǎn)動(dòng)畫(huà)效果

    這篇文章主要介紹了Android Activity跳轉(zhuǎn)動(dòng)畫(huà)效果,本文圖文并茂給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2017-02-02
  • Android UI效果之繪圖篇(四)

    Android UI效果之繪圖篇(四)

    這篇文章主要介紹了Android UI效果之繪圖篇,針對(duì)Android開(kāi)發(fā)中的UI效果設(shè)計(jì)模塊中Shader進(jìn)行講解,感興趣的小伙伴們可以參考一下
    2016-02-02

最新評(píng)論