TwoDream
unread,Jan 22, 2011, 10:49:53 AM1/22/11Sign in to reply to author
Sign in to forward
You do not have permission to delete messages in this group
Either email addresses are anonymous for this group or you need the view member email addresses permission to view the original message
to 日本Androidの会
初めまして。TwoDreamと申します。
初めて投稿させて頂きます。
x86版の環境を使って手持ちのネットブックに入れて、Androidに関してミドル(KernelやFramework)から
アプリケーションまで広く勉強中です。
x86版を使っているのは、手元にG1等の実機がなく、VM環境等を利用して手軽に勉強が出来ると思ったからで、
深い意味はありません。
本題ですが、Androidでは標準でマウスカーソルの表示(そもそもマウス全般)に対応していませんが、
x86版では、さすがに標準(レポジトリからソースを取得した時点)で対応しています。
巷で上がっているマウス用のPatchが適用されているようでした。
そのx86版の標準環境では、シンプルな白縁の黒塗りのマウスカーソルが表示されますが、これを自分好みの
画像(pngやgif等)に変えられないか、と思った事がきっかけです。
マウス表示の処理に関して調べたところ、WindowManagerServiceというClassの中で
Surface Classを利用し、取得したCanvasに対して、Paint、Path Classを利用して、
いわゆる "線" の描画を組み合わせてマウスの矢印の絵を描画していました。
実装部の抜粋は以下のようになっております。
(frameworks\base\services\java\com\android\server
\WindowManagerService.java)
mMouseSurface =
new Surface(mFxSession,
0, -1, mMw, mMh,
PixelFormat.TRANSPARENT,
Surface.FX_SURFACE_NORMAL);
mCanvas = mMouseSurface.lockCanvas(null);
Paint tPaint = new Paint();
tPaint.setStyle(Paint.Style.STROKE);
tPaint.setStrokeWidth(2);
tPaint.setColor(0xffffffff);
mPath.moveTo(0.0f, 0.0f);
mPath.lineTo(12.0f, 12.0f);
mPath.lineTo(7.0f, 12.0f);
mPath.lineTo(11.0f, 20.0f);
mPath.lineTo(8.0f, 21.0f);
mPath.lineTo(4.0f, 13.0f);
mPath.lineTo(0.0f, 17.0f);
mPath.close();
mCanvas.clipPath(mPath);
mCanvas.drawColor(0xff000000);
mCanvas.drawPath(mPath, tPaint);
mMouseSurface.unlockCanvasAndPost(mCanvas);
mMouseSurface.openTransaction();
mMouseSurface.setSize(mMw, mMh);
mMouseSurface.closeTransaction();
上記の実装を利用し、安直にmCanvas.drawPath()している個所をmCanvas.drawBitmap()に変更して
みたのですが、何も描画されませんでした。
drawBitmap()に渡すBitmapは、BitmapFactory.decodeResource()を利用してリソースから
画像データを取得するようにしています。
リソースは、png画像を使用しており、frameworks\base\core\res\res\drawable-mdpi、
frameworks\base\core\res\res\drawable-hdpiそれぞれに配置しました。
png画像は、同じディレクトリ内になる、emo_im_cool.pngをリネームして利用しています。
DDMSでログを見る限り、関連しそうなエラーログは出ていませんし、当然リソースのロードに失敗しているような
ログも出ていません。
そもそも、Frameworkでの描画方法自体知っている訳ではなく、現状の実装からこうやったら出来るのではないか?
という想像だけで試しています。
ですので、同じようにマウスカーソルを好みの画像に変更して使っている、又はマウスではないが、Framework上での
画像描画例を知っている、等の情報をお持ちの方がいらっしゃれば、ご教授頂きたく、投稿させて頂きました。
何卒、宜しくお願い致します。