安卓Tv开发(二)焦点控制(键盘事件)

上篇文章中说道了触控事件,但是只对MotionEvent做了细说,很多东西还是不懂怎么用触控事件,现在就做对上篇的补充吧

在view重写onTouchEvent方法,通过event.getAction()对不同的enent就可以处理了,代码如下

  1. public boolean onTouchEvent(MotionEvent event)
  2. {
  3. int events[] = {MotionEvent.ACTION_DOWN, MotionEvent.ACTION_MOVE,
  4. MotionEvent.ACTION_UP, MotionEvent.ACTION_MOVE, MotionEvent.ACTION_CANCEL, MotionEvent.ACTION_OUTSIDE,
  5. MotionEvent.ACTION_POINTER_DOWN,MotionEvent.ACTION_POINTER_UP,
  6. MotionEvent.EDGE_TOP,MotionEvent.EDGE_BOTTOM,MotionEvent.EDGE_LEFT,MotionEvent.EDGE_RIGHT};
  7. String szEvents[]={"ACTION_DOWN", "ACTION_MOVE",
  8. "ACTION_UP", "ACTION_MOVE", "ACTION_CANCEL", "ACTION_OUTSIDE",
  9. "ACTION_POINTER_DOWN","ACTION_POINTER_UP",
  10. "EDGE_TOP","EDGE_BOTTOM","EDGE_LEFT","EDGE_RIGHT"};
  11. for(int i=0; i < events.length; i++)
  12. {
  13. if(events[i] == event.getAction())
  14. {
  15. if(oldevent != event.getAction())
  16. {
  17. DisplayEventType(szEvents[i]);
  18. oldevent = event.getAction();
  19. }
  20. break;
  21. }
  22. }
  23. return super.onTouchEvent(event);
  24. }

好了 不说了 今天言归正传,就来接着说键盘事件,keyevent.

KeyEvent事件对象

一  keyevent包括以下类型,

KeyEvent.KEYCODE_DPAD_UP; 上

KeyEvent.KEYCODE_DPAD_DOWN; 下

KeyEvent.KEYCODE_DPAD_LEFT;左

KeyEvent.KEYCODE_DPAD_RIGHT;右

KeyEvent.KEYCODE_DPAD_CENTER;确定键

KeyEvent.KEYCODE_DPAD_RIGHT; 右

KeyEvent.KEYCODE_XXX:数字键 (xx表示你按了数字几)

KeyEvent.KEYCODE_BACK; 返回键

KeyEvent.KEYCODE_HOME;房子键

二 键盘事件

键盘事件比较简单,直接重写onKeyDown或者onKeyUP方法就可以了。down方法如下,其他一样,比如TV遥控器监听确定以及上下左右的时候,可以通过此方法实现频道,和确定的功能。之后的主页UI就会用到以下方法。

public boolean onKeyDown(int keyCode,KeyEvent event)

    {

    switch(keyCode)

    {

    case KeyEvent.KEYCODE_0:

        DisplayToast("你按下数字键0");

        break;

    case KeyEvent.KEYCODE_DPAD_CENTER:

        DisplayToast("你按下中间键");

        break;sss

    case KeyEvent.KEYCODE_DPAD_DOWN:

        DisplayToast("你按下下方向键");

        break;

    case KeyEvent.KEYCODE_DPAD_LEFT:

        DisplayToast("你按下左方向键");

        break;

    case KeyEvent.KEYCODE_DPAD_RIGHT:

        DisplayToast("你按下右方向键");

        break;

    case KeyEvent.KEYCODE_DPAD_UP:

        DisplayToast("你按下上方向键");

           break;

    case KeyEvent.KEYCODE_ALT_LEFT:

        DisplayToast("你按下组合键alt+←");

        break;

    }

    return super.onKeyDown(keyCode, event);

    }

知道了键盘时间这还不够,接下来就要处理模拟鼠标事件了

dispatchkeyevent

在了解这个时间之前,先熟悉下dispatchkeyevent和onkeydown和onkeyup的关系 当键盘按下时

首先触发dispatchKeyEvent

然后触发onUserInteraction 再次onKeyDown 如果按下紧接着松开,则是俩步

紧跟着触发dispatchKeyEvent 然后触发onUserInteraction 再次onKeyUp

当我们重写了onKeyDown方法后,如果return false,则会继续调用系统的onKeyDown方法。如果只想让程序调用自己写的onKeyDown,则需要return true。了解关系后就看鼠标模拟事件。我们重写dispatchKeyEvent,之后就可以做相应操作,

备注:TVConstants属于个人封装的类,对应keyevent的相应类型。
<span style="font-size:14px;">@Override
	public boolean dispatchKeyEvent(KeyEvent event) {
		switch(event.getKeyCode()){
			case TVConstants.KEYCODE_UP:
			case TVConstants.KEYCODE_DOWN:
			case TVConstants.KEYCODE_LEFT:
			case TVConstants.KEYCODE_RIGHT:
			case TVConstants.KEYCODE_CENTER:

			default:
				break;
		}
		return super.dispatchKeyEvent(event);
	}
   </span>

三  instrumentation

instrumentation发送键盘鼠标事件:Instrumentation提供了丰富的以send开头的函数接口来实现模拟键盘鼠标,如下所述:

sendCharacterSync(int keyCode)            //用于发送指定KeyCode的按键

sendKeyDownUpSync(int key)                //用于发送指定KeyCode的按键

sendPointerSync(MotionEvent event)     //用于模拟Touch

sendStringSync(String text)                   //用于发送字符串

Instrumentation inst=new Instrumentation();

inst.sendPointerSync(MotionEvent.obtain(SystemClock.uptimeMillis(),SystemClock.uptimeMillis(), MotionEvent.ACTION_DOWN, 10, 10,
0));

inst.sendPointerSync(MotionEvent.obtain(SystemClock.uptimeMillis(),SystemClock.uptimeMillis(), MotionEvent.ACTION_UP, 10, 10, 0));

类似peddingIntent的用法,这样我们自己绘制一个鼠标,在里面相应代码处理相应逻辑就可以具体实现代码之后将会发布。

时间: 2024-10-17 05:21:17

安卓Tv开发(二)焦点控制(键盘事件)的相关文章

安卓TV开发(四) 实现主流智能TV视频播放器UI

前言:移动智能设备的发展,推动了安卓另一个领域,包括智能电视和智能家居,以及可穿戴设备的大量使用,但是这些设备上的开发并不是和传统手机开发一样,特别是焦点控制和用户操作TV上有很大的区别,本系列博文主要用TV播放器的实现去了解下在智能设备上的开发一个app的流程,实现遥控器控制焦点移动,方向键模拟鼠标,并在线完成视频直播,手机当遥控器使用等相关功能. 上一篇中 安卓TV开发(三) 实现主流TV视频播放器UI 初步学习了智能电视上UI的设计,且只实现了一个遥控器可控制的view父框架,但是里面的i

安卓TV开发(十) 智能电视开发之在线视频直播

转载注明出处:http://blog.csdn.net/sk719887916/article/details/46582987 从<安卓TV开发(八) 移动智能终端多媒体之在线加载网页视频源> 中我总结了怎么去解析一个网页,获取里面数据实现展现,如何去播放视频呢,今天就给大家简单介绍下比较常用视频开源框架vitamio,  项目sdk地址:https://www.vitamio.org/en/  .              解压vitamio sdk 可以看到有个InitActivity的

delphi 10 seattle 安卓服务开发(二)

关于delphi 10 移动服务开发的几张图

vue学习笔记(一)关于事件冒泡和键盘事件 以及与Angular的区别

一.事件冒泡 方法一.使用event.cancelBubble = true来组织冒泡 <div @click="show2()"> <input type="button" value="按钮" @click="show1($event)"> </div> methods:{ show1:function(ev){ console.log(ev); alert(1); ev.cancelB

C#/winform 自动触发鼠标、键盘事件

要在C#程序中触发鼠标.键盘事件必须要调用windows函数. 一.鼠标事件的触发 1.引用windows函数mouse_event /// <summary> /// 鼠标事件 /// </summary> /// <param name="flags">事件类型</param> /// <param name="dx">x坐标值(0~65535)</param> /// <param

关于事件冒泡和键盘事件 以及与Angular的区别

一.事件冒泡 方法一.使用event.cancelBubble = true来组织冒泡 <div @click="show2()"> <input type="button" value="按钮" @click="show1($event)"> </div> methods:{ show1:function(ev){ console.log(ev); alert(1); ev.cancelB

自动化测试基础篇--Selenium鼠标键盘事件

前面几篇文章我们学习了怎么定位元素,同时通过实例也展示了怎么切换到iframe,怎么输入用户名和密码,怎么点击登录按钮,首先我们先回顾一下元素的基本操作. 1.点击(鼠标左键)页面按钮:click() 2.请空输入框:clear() 3.输入字符串:send_keys() 4.提交表单:submit() 今天这篇文章着重讲一下键盘和鼠标的模拟事件. 一.鼠标事件 1.首先模拟鼠标的操作需要先导入鼠标模块: from selenium.webdriver.common.action_chains

Android TV开发--实现延时关机功能(二)逻辑实现

模块功能描述(总述) 上一篇文章:Android TV开发--实现延时关机功能(一)功能描述 讲的是延时关机整体功能描述以及UI效果,这篇文章将着重讲解逻辑实现. 按照功能模块分为3部分:关机App.关机Service.Launcher 模块图如下: 关机App模块 主要功能:1.展示UI设置延时时长 2.取消延时关机 3.取消延时对话框倒计时功能 1.展示UI设置延时时长 此处即为延时关机功能入口: 1.布局及逻辑处理Activity如下,代码中含有注释: /** * 延时关机 */ publ

事件处理【安卓4】——键盘事件、触摸事件

OnKeyListener(键盘事件) 正则表达式       w:任意字符   +:一个或一个以上字符 1 TextView tv=(TextView) findViewById(R.id.keyTV02); 2 EditText input=(EditText) findViewById(R.id.keyET01); 3 ImageView img=(ImageView) findViewById(R.id.keyImg01); 4 input.setOnKeyListener(new On