[Java][Android]角丸なウィジェットの背景色を変える


どうも、hide92795です

ウィジェットを作っている時に、角が四角だとどうしても刺々しさが出てしまうので、丸角にすることにしました。

初めはWidgetのレイアウトの背景にxmlで作ったShapeを指定していたのですが、その背景色をユーザーが自由に変えられるようにしようとしたところ案外ハマってしたのでメモ


Xmlで作成したShapeなDrawableはGradientDrawableとして取得することが出来ます。

しかし、基本的にDrawableはそれを作成したContextと結びついているため、ウィジェットで使うRemoteViewには適用できません。

(BitmapDrawableは内部にBitmapを持っているのでgetBitmap()で取得することが出来ます。)

悩んだ挙句、ImageViewのColorFilterという方法を思いつきました。

ただし、ColorFilterをxmlリソースのDrawableに適用するには結局Drawableをセットしなければいけないので、画像リソースのものを用意する必要があります。

また、この方法で出来るのは単色指定のみです。グラデーションの指定はできないと思います。

background_widget.9

↑が今回背景に使用する9Patch画像です。

ウィジェットのレイアウトxmlはこちら

RelativeLayoutを使用し、再背面に背景として使用するImageViewを設置します。

そして、RemoteViewを作成する部分で

このように透明度と色を指定します。

setAlpha(int color)はAPI11から非推奨になっていますが、引数がfloatの方が何故か動いてくれなかったので仕方なくこちらを


ひとまずはこれでうまく行ったので良しとしましょう

しかし、RemoteViewはなんとも言えない使いにくさが(´Д`)

ではノシ

 

  1. コメントはまだありません。

  1. トラックバックはまだありません。

*