2012-02-23 99 views
0

我試圖創建一個自定義的方式來顯示時間(想象一個弧形時鐘,但不同)的主屏幕小部件。所以,我需要能夠使用android圖形庫來繪製這個小部件。實際上,我只需要每20或30分鐘更新一次。在畫布上繪製到主屏幕小部件 - Android

最好的辦法是做什麼?這看起來好像對小部件的視圖類型有很多限制。我可以只包括一個畫布,我更新信息,它會重畫?或者我是否需要它可能是ImageView,並且BroadCast Receiver每20分鐘重繪一幅圖像,然後替換圖像?

TL; DR我可以在每隔20分鐘重新繪製一個主屏幕小部件中包含畫布對象嗎?

我很難找出如何短語問題來搜索答案,所以任何幫助正確的方向將不勝感激。

+0

所有關於[**開發Android主屏幕小部件**](HTTP小部件://blog.doityourselfandroid。 com/2011/05/24/development-android-home-screenwidgets /) – 2012-02-23 09:50:27

回答

2

Android的主屏幕小部件使用系統RemoteViews

這意味着您的應用程序提供其佈局的編號,以及對此佈局的一些基本(有限)修改,例如設置文本,顏色,可見性等。所有這些修改都寫入「Parcel」,並由系統到實際管理主屏幕項目的其他過程。此過程將加載佈局,不加修改數據並適用於佈局。

所以你看,你不能有任何直接訪問畫布。

編輯:繪製任何東西的一種可能性是使用RemoteViews.setBitmap,因此您可以在小部件中使用任何位圖。但要小心,Android的人說這是慢的,因爲位圖必須是stored to "parcel"這意味着轉換爲類似字符串的東西,然後轉換回其他部分的位圖。如果圖像很小,可能會起作用。

+0

你能想到替代這個問題嗎? 我見過這樣的東西:http://fs01.androidpit.info/ass/x38/738338-1281878389726.jpg 但我聽說它真的很爛。 – 2012-02-24 04:12:46

+0

請參閱編輯。 – 2012-02-24 08:41:50

2

在你widget_layout.xmlImageView將包含繪圖區

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

在你AppWidgetProvider.onUpdate方法,創建位圖,並從中做出Canvas,你可以借鑑。位圖越大,以犧牲性能爲代價的質量越好。

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

當你完成你的畫的畫布上,用更新setImageViewBitmap

final RemoteViews remoteViews = new RemoteViews(
      context.getPackageName(), R.layout.widget_layout); 
remoteViews.setImageViewBitmap(R.id.widget_image, bitmap);