修改Android系統的鼠標光標

 如果你的Android設備支持鼠標,你將會發現默認的光標爲灰色半透明的三角形,系統的默認主題是黑色的,造成很難發現鼠標的位置。所以本文介紹怎樣定製Android系統的鼠標光標。

     Android系統對鼠標的支持並不好,因爲Android系統原本是爲手機量身定做的,手機系統基本上是不需要鼠標的。但是隨着Android系統移植到其他領域,對鼠標的支持也越來越有意義。現在Android已經支持鼠標了,但是有一個完善的過程。本文後面會介紹到Android對鼠標支持的一些不足。

     原來我以爲Android系統的光標會和Windows差不多,是一個圖片資源呢。這樣的話,我只需要替換掉這個圖片就可以搞定了。找了好久都沒有找到圖片資源的位置,最終反過來思考,Android系統鼠標光標非常簡單,手動繪製也不是很難的事情。會不會是代碼中繪製的呢?

     沿着這個思路,終於在WindowManagerService.java中,找到了相關的代碼:

frameworks/base/services/java/com/android/server/WindowManagerService.java

相關的代碼位於performLayoutAndPlaceSurfacesLockedInner方法中:

				mMouseSurface =
					new Surface(mFxSession,
								0,-1,mMw,mMh,
								PixelFormat.TRANSPARENT,
								Surface.FX_SURFACE_NORMAL);
				mCanvas = mMouseSurface.lockCanvas(null);
				mCanvas.drawColor(0x0);

				mPath.moveTo(0.0f,   0.0f);
				mPath.lineTo(16.0f, 0.0f);
				mPath.lineTo(0.0f, 16.0f);
				mPath.close();
				mCanvas.clipPath(mPath);
				mCanvas.drawColor(0x66666666);

				mMouseSurface.unlockCanvasAndPost(mCanvas);
				mMouseSurface.openTransaction();
				mMouseSurface.setSize(mMw,mMh);
				mMouseSurface.closeTransaction();

     可以看出默認情況下Android系統用顏色值0×66666666繪製了一個三角形,這個顏色值爲32bit——A8R8G8R8,A表示透明度,0表示全部透明,0xff爲不透明,0×66表示半透明。

     你可以修改其中代碼來修改鼠標光標的形狀,需要學習一下Android繪圖系統,熟悉Paint,Canvas等概念,不過挺簡單的。下面是我的光標繪製的代碼:

				mMouseSurface =
					new Surface(mFxSession,
								0,-1,mMw,mMh,
								PixelFormat.TRANSPARENT,
								Surface.FX_SURFACE_NORMAL);
				mCanvas = mMouseSurface.lockCanvas(null);
				mCanvas.drawColor(0x0);

				mPath.moveTo(0.0f,   0.0f);
				mPath.lineTo(0.0f, 19.0f);
				mPath.lineTo(14.0f, 14.0f);
				mPath.close();
				mCanvas.clipPath(mPath);
				mCanvas.drawColor(0xFFFFFFFF);
				Paint paint = new Paint();
				paint.setStyle(Paint.Style.STROKE);
				paint.setColor(0xFF000000);
				mCanvas.drawPath(mPath, paint);

				mMouseSurface.unlockCanvasAndPost(mCanvas);
				mMouseSurface.openTransaction();
				mMouseSurface.setSize(mMw,mMh);
				mMouseSurface.closeTransaction();

繪製的光標爲一個瘦一點兒的不透明的白色填充的三角形,然後用黑色給白色三角形描邊。主要是模仿Windows的光標風格,對於各種顏色基調的主題這個光標都可以很清晰。

     可以看出Android系統鼠標光標的定製不是非常容易,需要修改代碼,相信Android後續版本會對鼠標的支持有改進。以上代碼僅供參考,如有錯誤敬請指正。

 

本文轉自:http://my.unix-center.net/~Simon_fu/?p=555

發佈了13 篇原創文章 · 獲贊 0 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章