Рисуем на холсте для виджета на главный экран - Android - PullRequest
0 голосов
/ 23 февраля 2012

Я пытаюсь создать виджет домашнего экрана, который представляет собой собственный способ отображения времени (представьте, что дуговые часы отличаются от других). Итак, мне нужно уметь рисовать с помощью графической библиотеки Android для этого виджета. Реально мне нужно было бы обновляться каждые 20 или 30 минут.

Какой лучший способ сделать это? Кажется, что существует множество ограничений на типы представлений для виджетов. Могу ли я просто включить холст, который я обновляю информацией, и он будет перерисован? Или мне нужно, чтобы это был ImageView, и чтобы BroadCast Receiver перерисовывал одно изображение каждые 20 минут, а затем заменял изображение?

TL; DR Можно ли включить объект холста в виджет домашнего экрана, который я перерисовываю каждые 20 минут?

Я с трудом пытаюсь понять, как сформулировать вопрос, чтобы найти ответ, поэтому любая помощь в правильном направлении будет принята с благодарностью.

Ответы [ 2 ]

2 голосов
/ 13 февраля 2014

В вашем widget_layout.xml есть ImageView, который будет содержать вашу область рисования

<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);
2 голосов
/ 23 февраля 2012

Виджет главного экрана Android с использованием системы RemoteViews .

Это означает, что ваше приложение предоставляет идентификатор своего макета и некоторый базовый (ограниченный) набор модификаций этого макета, например настройкитекст, цвет, видимость и т. д. Все эти изменения записываются в " Parcel " и отправляются системой другому процессу, который фактически управляет элементами главного экрана.Этот процесс будет загружать макет, отменять данные о модификации и применять к макету.

Итак, вы видите, что у вас не может быть прямого доступа к Canvas.

EDIT :одна возможность нарисовать что-либо - это использовать RemoteViews.setBitmap, чтобы у вас был какой-либо растровый рисунок в виджете.Но будьте осторожны, ребята из Android говорят, что это МЕДЛЕННО, поскольку растровое изображение должно быть сохранено в «parcel» , что означает преобразование в нечто вроде строки, а затем преобразование обратно в растровое изображение в другой части.Если это маленькое изображение, оно может работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...