2012-02-20 11 views
0

私は、アンドロイドであらゆる種類の画像を作成/変更するのが初めてです。私がしようとしているのは次のようなものです:アンドロイド:ウィジェットにカスタマイズしたイメージを追加するには?

私はブロードキャスト受信機から定期的に更新されるウィジェットを持っています。つまり、このウィジェットに自作の(つまりプログラムで作成した)画像を表示したいのです。私は実際に画像をウィジェットのレイアウトにどのように追加するのか分かりません。 誰も私を助けることができますか?ウィジェットを更新するコードがあります:

public class MyReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context.getApplicationContext()); 

     int[] allWidgetIds = intent.getIntArrayExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS); 

     // DO SOME THINGS... 

     ComponentName myWidget = new ComponentName(context.getApplicationContext(), MyWidgetProvider.class); 

     int[] allMyWidgetIds = appWidgetManager.getAppWidgetIds(myWidget); 

     for (int widgetId : allMyWidgetIds) { 
      RemoteViews rViews = new RemoteViews(context.getPackageName(), R.layout.widget_layout); 
      rViews.setTextViewText(R.id.TextView01, "xyz"); // this works just fine, i.e. it gets updated as intended :) 

      appWidgetManager.updateAppWidget(widgetId, rViews); 
     } 

     // set next update 
     Calendar c = Calendar.getInstance(); 
     c.add(Calendar.SECOND, Config.UPDATE_RATE); 

     Date d = new Date(c.getTimeInMillis()); 
     Intent i = new Intent(context.getApplicationContext(), MyReceiver.class); 

     i.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, allWidgetIds); 
     PendingIntent sender = PendingIntent.getBroadcast(context.getApplicationContext(), 0, i, PendingIntent.FLAG_UPDATE_CURRENT); 

     AlarmManager aManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
     aManager.set(AlarmManager.RTC, d.getTime(), sender); 
    } 
} 

これはうまくいきます。 "xyz"がTextViewに書き込まれた行において、以前に(放送受信機内で)組み立てられたデータは意図したとおりに表示され、すなわち更新される。 この時点で、このデータを「描画」したい、つまりウィジェットに表示するグラフを作成したいと考えています。

ただし、どうすればよいですか?私は最後にdrawableを持っていると思います。どうすれば実際にこれをウィジェットに表示させることができますか?

UPDATE:

これは、グラフィックスを行う必要がありますビュークラスです。今のところ、それはちょうど短い線を引く。

public class Chart extends View { 
    public Chart(Context context) { 
     super(context); 
    } 

    @Override 
    public void onDraw(Canvas canvas) { 
     canvas.drawColor(Color.WHITE); 

     Paint paint = new Paint(); 
     paint.setFlags(Paint.ANTI_ALIAS_FLAG); 
     paint.setColor(Color.BLACK); 

     canvas.drawLine(0, 0, 30, 30, paint); 
    } 
} 

ウィジェットのレイアウトはかなり退屈です::私は活動にsetContentView()を介してビューとしてこれを設定した場合、これは動作します

<?xml version="1.0" encoding="utf-8"?> 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/widget_layout" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_margin="8dip" 
    android:background="@drawable/traffic_shape" > 
    <TextView 
     android:id="@+id/TextView01" 
     android:text="test" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" > 
    </TextView> 
    <ImageView 
     android:id="@+id/graph" 
     android:contentDescription="blah" 
     android:src="@drawable/icon" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" > 
    </ImageView> 
</LinearLayout> 

いいえ、私は中に作成するビューを得るのですか私のチャートクラスはウィジェットに表示されますか?残念ながら、RemoteViewsは、私が自分の質問に答えるために持っているように... :(

+0

私はかなりImageViewのを追加し、あなたのレイアウトでのTextViewを持っているだけのように、それを得ることはありませんあなたは –

+0

はいを​​探している他に何? - 私はこの画像ビューを持っています。今、私はこのクラスxを "View"に拡張しています。私のイメージをそこに作成してください...しかし、今は:レイアウトのxmlで定義されたイメージビューに表示されるビュー(クラスxで表される)を取得するにはどうすればいいですか? – xenonite

答えて

1

が見えるようだとしてビューを設定するためのあらゆる機能を提供しません。>コードで苦労のpainfull時間後に答えを見つけた:(

for (int widgetId : allWidgetIds) 
{ 
    RemoteViews rViews = new RemoteViews(context.getPackageName(), R.layout.widget_layout); 

    Graph graph = new Graph(); 
    rViews.setImageViewBitmap(R.id.graph, graph.getBitmap()); 

    appWidgetManager.updateAppWidget(widgetId, rViews); 
} 

Graph.javaは、このようなかなっていると:

public class Graph { 
    public Bitmap getBitmap() { 
     Bitmap bitmap = Bitmap.createBitmap(128, 128, Bitmap.Config.ARGB_8888); 
     Canvas canvas = new Canvas(bitmap); 

     canvas.drawColor(Color.WHITE); 

     Paint paint = new Paint(); 

     paint.setFlags(Paint.ANTI_ALIAS_FLAG); 
     paint.setColor(Color.RED); 
     canvas.drawLine(0, 0, 128, 128, paint); 
     return bitmap; 
    } 
} 
関連する問題