2012-02-23 16 views
0

私は時間を表示するカスタム方法であるアーククロックを想像していますが、違うホームスクリーンウィジェットを作成しようとしています。だから、私はこのウィジェットにアンドロイドのグラフィックライブラリを使って描くことができる必要があります。現実的には、20分おきに更新する必要があります。キャンバスをホームスクリーンウィジェットに描画 - Android

これを行うにはどうすればよいですか?ウィジェットのビューの種類には多くの制限があるようです。私は情報で更新するキャンバスを含めるだけで、それを再描画することはできますか?それとも、ImageViewにする必要があり、BroadCast Receiverで20分ごとに1枚のイメージを再描画してイメージを置き換える必要がありますか?

TL; DR私は20分ごとに再描画するホーム画面ウィジェットにキャンバスオブジェクトを含めることはできますか?

質問をフレーズで回答する方法を見つけようとしているので、適切な方向への助けに感謝します。

+0

を使用してウィジェットを更新します//blog.doityourselfandroid。 com/2011/05/24/developing-android-home-screenwidgets /) –

答えて

2

Androidのホーム画面ウィジェット使用システムRemoteViewsです。

これは、あなたのアプリがそのレイアウトのIDと、テキスト、色、可視性の設定など、レイアウトの基本的な(限られた)変更のセットを提供することを意味します。これらの変更はすべて "Parcel"実際にホーム画面の項目を管理する他のプロセスに移行することができます。このプロセスは、レイアウトを読み込み、変更データをアンパックし、レイアウトに反映します。

Canvasに直接アクセスすることはできません。

EDIT:何かを描画する可能性があるのは、RemoteViews.setBitmapを使用することです。そのため、ウィジェットにビットマップがあります。しかし、ビットマップはstored to "parcel"である必要があります。これは、文字列のように変換され、次に別の部分のビットマップに変換されることを意味します。それが小さい画像の場合、動作する可能性があります。あなたのwidget_layout.xml

+0

この問題の代替手段はありますか? 私はこのようなものを見た:http://fs01.androidpit.info/ass/x38/738338-1281878389726.jpg しかし、私はそれが本当にglitchy聞いた。 –

+0

これについてはEDITを参照してください。 –

2

は、あなたのAppWidgetProvider.onUpdate方法で

<ImageView 
    android:id="@+id/widget_image" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    /> 

あなたの描画領域が含まれているビットマップを作成し、あなたが描くことができるということ、それから、Canvasを行いますImageViewを持っています。ビットマップが大きければ大きいほど、パフォーマンスは低下しますが、品質は向上します。

Bitmap bitmap = Bitmap.createBitmap(400, 180, Bitmap.Config.ARGB_8888); 
Canvas c = new Canvas(bitmap); 

あなたがあなたのキャンバスに絵行われ、すべてのHTTP([** ** Androidのホーム画面のウィジェットを開発する]で約setImageViewBitmap

final RemoteViews remoteViews = new RemoteViews(
      context.getPackageName(), R.layout.widget_layout); 
remoteViews.setImageViewBitmap(R.id.widget_image, bitmap); 
関連する問題