Android系统添加自定义鼠标样式通过按键切换实例详解

  

<强>一,应用通过视图修改鼠标样式

  

应用程序视图上修改鼠标样式比较简单,通过,悬停事件获取鼠标坐标并使用如下方法修改为自定义图片:

  

getWindow () .getDecorView () .setPointerIcon (PointerIcon.load (getresource (), R.drawable.pointer_spot_touch_icon));

        imageView=(imageView) findViewById (R.id.image_view);   imageView。setOnHoverListener(新View.OnHoverListener () {   @SuppressLint ({“SetTextI18n”、“ResourceType”})   @Override   公共布尔>   & lt; & # 63; xml version=" 1.0 " encoding=" utf - 8 " & # 63;比;   & lt; pointer-icon xmlns: android=" http://schemas.android.com/apk/res/android "   android:位图=" @drawable/pointer_red_dot_arrow”   android: hotSpotX=" 6 dp "   android: hotSpotY=" 6 dp/比;   之前      但是应用修改鼠标样式的观点关闭后,鼠标样式会恢复成默认的黑箭头,因此不依赖应用去动态切换鼠标样式需要在框架层修改系统源码实现。   

<强>二,框架层添加自定义鼠标样式并通过按键切换

  

<强>(1)添加自定义样式资源

  

系统图标资源在框架/基地/核心/res/res/drawable-mdpi/目录,其中,pointer_arrow.png pointer_arrow_large。png是系统默认的黑色箭头,

  

pointer_arrow_red_dot.png pointer_arrow_red_dot_large。png是自己添加的红点样式图片:

  

 Android系统添加自定义鼠标样式通过按键切换实例详解

  

然后在框架/基地/核心/res/res/可拉的/目录添加对应的xml:

  

pointer_arrow_red_dot_icon.xml         & lt; & # 63; xml version=" 1.0 " encoding=" utf - 8 " & # 63;比;   & lt; pointer-icon xmlns: android=" http://schemas.android.com/apk/res/android "   android:位图=" @drawable/pointer_arrow_red_dot”   android: hotSpotX=" 5 dp "   android: hotSpotY=" 5 dp/祝辞      

pointer_arrow_red_dot_large_icon.xml         & lt; & # 63; xml version=" 1.0 " encoding=" utf - 8 " & # 63;比;   & lt; pointer-icon xmlns: android=" http://schemas.android.com/apk/res/android "   android:位图=" @drawable/pointer_arrow_red_dot_large”   android: hotSpotX=" 10 dp”   android: hotSpotY=" 10 dp/祝辞      

  

修改框架/基地/核心/res/res/价值/风格。xml添加资源配置,注意名字的匹配。

  

 Android系统添加自定义鼠标样式通过按键切换实例详解

  

,

  

 Android系统添加自定义鼠标样式通过按键切换实例详解

  

修改,框架/基地//res/res/核心价值观/attrs.xml 引用资源:

  

 Android系统添加自定义鼠标样式通过按键切换实例详解

  

<强> Java层(2)获取资源

  

修改框架/基地/core/java/android/视图/PointerIcon。java,添加如下定义:

  

 Android系统添加自定义鼠标样式通过按键切换实例详解

  

在getSystemIconTypeIndex (int类型)函数中返回之前配置的资源:

  

 Android系统添加自定义鼠标样式通过按键切换实例详解

  

<强> (3)c++层添加对应的id并加载资源

  

修/改框架基?核心/jni/android_view_PointerIcon.h

        *指针图标风格。   *必须匹配android.view.PointerIcon的定义。   */enum {   POINTER_ICON_STYLE_CUSTOM=1,   POINTER_ICON_STYLE_NULL=0,   POINTER_ICON_STYLE_ARROW=1000,   POINTER_ICON_STYLE_CONTEXT_MENU=1001,   POINTER_ICON_STYLE_HAND=1002,   POINTER_ICON_STYLE_HELP=1003,   POINTER_ICON_STYLE_WAIT=1004,   POINTER_ICON_STYLE_CELL=1006,   POINTER_ICON_STYLE_CROSSHAIR=1007,   POINTER_ICON_STYLE_TEXT=1008,   POINTER_ICON_STYLE_VERTICAL_TEXT=1009,   POINTER_ICON_STYLE_ALIAS=1010,   POINTER_ICON_STYLE_COPY=1011,   POINTER_ICON_STYLE_NO_DROP=1012,   POINTER_ICON_STYLE_ALL_SCROLL=1013,   POINTER_ICON_STYLE_HORIZONTAL_DOUBLE_ARROW=1014,   POINTER_ICON_STYLE_VERTICAL_DOUBLE_ARROW=1015,   POINTER_ICON_STYLE_TOP_RIGHT_DOUBLE_ARROW=1016,   POINTER_ICON_STYLE_TOP_LEFT_DOUBLE_ARROW=1017,   POINTER_ICON_STYLE_ZOOM_IN=1018,   POINTER_ICON_STYLE_ZOOM_OUT=1019,   POINTER_ICON_STYLE_GRAB=1020,   POINTER_ICON_STYLE_GRABBING=1021,      POINTER_ICON_STYLE_SPOT_HOVER=2000,   POINTER_ICON_STYLE_SPOT_TOUCH=2001,   POINTER_ICON_STYLE_SPOT_ANCHOR=2002,      POINTER_ICON_STYLE_REDDOT=10001,//增加自定义样式的枚举定义,与上面PointerIcon。java中的变量对应   };   

Android系统添加自定义鼠标样式通过按键切换实例详解