Я новичок в создании / изменении изображений любого вида в Android. я пытаюсь сделать следующее:
У меня есть виджет, который периодически обновляется с приемника вещания. Дело в том, что я хочу отобразить в этом виджете самодельное (то есть программно созданное) изображение. и я на самом деле не знаю, как добавить изображение в макет виджетов.
Может кто-нибудь мне помочь? вот код, который обновляет виджет:
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, данные, которые я собрал ранее (в вещательном приемнике), отображаются по назначению, то есть обновляются.
в этот момент я хочу «нарисовать» эти данные, то есть создать график, который должен отображаться в виджете.
но: как мне это сделать? я думаю, у меня будет рисование в конце. как мне на самом деле заставить это отображаться в виджете (и, конечно, также обновляться)?
UPDATE:
Это класс представления, который должен делать графику. пока он просто рисует короткую линию. это работает, если я устанавливаю это как представление через setContentView () в деятельности:
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);
}
}
макет виджета довольно скучный:
<?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>
нет, как мне получить представление, которое я создаю в моем Chart-классе, для отображения в виджете? К сожалению, RemoteViews не предлагает никакой функциональности для установки вида, как кажется ...: (