Для моего первого и самого удивительного Android-проекта я хочу создать виджет главного экрана, который отображает один из тех Arc Clocks, который все дети в эти дни бредят.
Исходя из ограничений RemoteViews, мне кажется, что подходящий способ получить его на самом деле нарисован на экране - использовать ImageView в фактическом макете, а затем, когда он обновляется, создайте ShapeDrawable или два и нарисуйте их на вновь созданный Bitmap. Затем установите Bitmap в качестве источника ImageView.
Есть что-то о том процессе, который я просто не грохочу. Ниже приведен код, который я пытался использовать для обновления виджета. Я вообще ничего не рисую на экране. ImageView имеет образ заполнителя, просто заданный свойством src
. Когда я не запускаю код, чтобы обновить его до моего рисунка, изображение-заполнитель останется на месте. Итак, я знаю, что этот код что-то делает, просто явно не так.
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget);
Bitmap bitmap = Bitmap.createBitmap(100, 100, Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
ShapeDrawable drawable = new ShapeDrawable(new ArcShape(0, 360));
drawable.getPaint().setColor(0xffff0000);
drawable.getPaint().setStrokeWidth(5.0f);
drawable.setIntrinsicWidth(100);
drawable.setIntrinsicHeight(100);
drawable.draw(canvas);
views.setImageViewBitmap(R.id.ImageView01, bitmap);
appWidgetManager.updateAppWidget(appWidgetId, views);
Я знал, что это не может быть так просто. Итак, я даже направляюсь в правильном направлении?
Обновление
Хорошо, может быть, это было слишком много информации. Вопрос, который я действительно пытаюсь задать, таков:
Если я хочу рисовать фигуры в виджетах, должен ли я использовать ImageView и создавать растровые изображения из моего ShapeDrawable или есть ли более подходящий способ рисовать в виджет, где он ограничен RemoteViews?