我是靠谱客的博主 虚幻酸奶,最近开发中收集的这篇文章主要介绍Android4.4 鼠标光标切换具体整改鼠标客制化,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

鼠标客制化


目的:在应用层,进入特定的应用显示自己的指定的鼠标icon,或者随时切换鼠标icon。


实现方案:开机预加载鼠标iconapp发送广播方式通过不同的indexshow出不同的icon。


Android系统鼠标流程原理

系统开机底层会调用java的一个方法getPointerIcon去加载java层的icon资源,然后画到最顶层的surface上面,开启只执行一次。所以要随时更换鼠标图片需要打通一条路让java层调用初始化鼠标icon的方法。鼠标的一切资源都是有java层,frameworks/base/core/res/res 里面提供。包括鼠标icon,鼠标focus等。


客制化过程

1.资源配置:

1.添加icon 对应xml 文件:frameworks/base/core/res/res

在这个文件夹的对应drawable-mdpi drawable-hdpi drawable-xdpi,

放进准备好的鼠标图片资源pointer_orbbec_arrow.png

系统默认文件如下:


增加完自己准备的图片和xmlxml直接复制就可以)



Xml文件里的内容也要修改:

原本:


添加的xml




三个drawable分别这么修改。

 

1.修改frameworks/base/core/res/res/values下的文件

Styles.xml中添加一个我们自己的icon item



添加的ICON 名字是 pointerOrbbecIconArrow

Java代码中会根据这个名字来寻找图片资源,所以一定要准确。

 

Attrs.xml文件 添加刚才的icon




到这里icon资源配置修改完毕。


2.代码修改:

1.修改JNI层代码:

frameworks/base/services/jni/com_android_server_input_InputManagerService.cpp

 

函数:obtainPointerController

主要是添加一个if分之对controller非空的处理,这个时候要注意要用系统原先的mouse controller 故注释掉new语句。原来的if句稍作修改:



这里修改了Android原生的方法getPointerIcon的参数,也就是加了一个整型参数,对应的JNI层函数声明和注册java method都要留意修改,JAVA层的接口也要对应修改。

下面是加了一if分之,因为开机第一次controller是NULL,肯定进了第一个if句,后面controller非NULL,所以想换icon就是进入下面这个if分之了:



JAVA层通过渠道会调用到这个方法,这里为了不破坏这个方法的参数结构,重新声明定义了一个native函数,java层通过app不同的cmd而向JNI层下达对应cmd以show出不同的icon,具体如下:





这边修改了JNI 会掉java方法的参数 getPointerIcon(),使其有个整型参数,用于区别不同的icon index还添加了函数nativeOrbbecNotify(),所以

 

在这个文件的注册java method的地方也要修改:

在函数:

int register_android_server_InputManager(JNIEnv* env) {



static JNINativeMethod gInputManagerMethods[] = {



JNI的修改到此为止。


2.java 层的修改

Frameworks/base/services/java/com/android/server/input/InputManagerService.java



另外nativeOrbbecNotify()的声明要加进去:




对应JNI层的方法,添加两个索引。


以上是获取icon资源的代码,接下来开始在代码上配置刚才添加的icon

 

Frameworks/base/core/java/android/view/PointerIcon.java

添加新iconindex




添加这两个index的索引功能:



这个索引指向values下的attrrs.xml 和 style.xml文件中的关键变量,前面已经添加过了,注意名字要一致这些细节,上文只是举例名字可能不一样。


到此为止关于mouseicon资源添加结束,接下来准备实现切换鼠标icon的功能。



2.Javainputmanagerservices中添加特定广播接收机,在特定情况下切换JNImouse controllericon raw内容

添加广播接收器:

Frameworks/base/services/java/com/android/server/input/InputManagerService.java

InputManagerService构造函数中添加以下内容:




注册广播接收,收到特定action  “com.example.mouseicon”的时候触发事件,dispatch()接口会向JNI层调用切换icon raw

代码修改完毕。


3.测试DEMO

新建一个android app project




测试结果:成功

后续只要在应用的oncreateondestroy加入以上发送广播机制,就可实现进入和退出应用的时候切换鼠标icon这个功能。


最后

以上就是虚幻酸奶为你收集整理的Android4.4 鼠标光标切换具体整改鼠标客制化的全部内容,希望文章能够帮你解决Android4.4 鼠标光标切换具体整改鼠标客制化所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(40)

评论列表共有 0 条评论

立即
投稿
返回
顶部