Что надлежащий путь состоит в том, чтобы реализовать виджет Android с динамично оттянутым содержанием?

Для моего первого и большей части awesomest проекта Android, я хочу создать виджет главного экрана, который отображает одни из тех Часов Дуги, что все дети бредят об этих днях.

На основе ограничений RemoteViews это смотрит на меня, что соответствующий способ привлечь его на самом деле экран должен использовать ImageView в фактическом расположении, затем когда это обновляет, создайте ShapeDrawable или два и потяните их на недавно созданный Битовый массив. Затем установите тот Битовый массив как источник 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?

14
задан MojoFilter 5 February 2010 в 21:23
поделиться

3 ответа

На самом деле в SDK есть виджет под названием AnalogClock , который очень похож на то, что вы пытаетесь сделать.

Он реализован как класс, расширяющий View и аннотированный @RemoteView . Он регистрирует получателей в Intent.ACTION_TIME_TICK и Intent.ACTION_TIME_CHANGED и отрисовывает себя путем переопределения метода onDraw . Ознакомьтесь с источником . Стандартное приложение AlarmClock предоставляет это представление как виджет, который можно добавить на главный экран.

Я думаю, что это хороший (если не лучший) способ реализовать то, что вы описали, и, очевидно, работает хорошо.

8
ответ дан 1 December 2019 в 14:32
поделиться

Чтобы создать собственный компонент, я бы расширил View или любой подкласс View и переопределил onDraw (Canvas canvas ) для рисования. На объекте холста вы можете вызывать такие методы, как drawLine (), drawArc (), drawPicture (), drawPoints (), drawText (), drawRect () и т. Д. .....

Вот подробности.

Вот api для холста.

Я считаю, что затем вы можете добавить свое собственное представление к удаленному представлению с целью создания виджета.

0
ответ дан 1 December 2019 в 14:32
поделиться

Отлично работает:

Paint p = new Paint(); 
p.setAntiAlias(true);
p.setStyle(Style.STROKE);
p.setStrokeWidth(8);
p.setColor(0xFFFF0000);

Bitmap bitmap = Bitmap.createBitmap(100, 100, Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
canvas.drawArc(new RectF(10, 10, 90, 90), 0, 270, false, p);

RemoteViews views = new RemoteViews(updateService.getPackageName(), R.layout.main);
views.setImageViewBitmap(R.id.canvas, bitmap);

ComponentName componentName = new ComponentName(updateService, DashboardAppWidgetProvider.class);
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(updateService);
appWidgetManager.updateAppWidget(componentName, views);

Думаю, проблема с вашим исходным кодом заключалась только в способе рисования дуги - вот почему ничего не обнаружилось.

Кстати: вы можете найти настраиваемые "Arc Clock" с очень маленьким объемом памяти в Market, выполнив поиск по запросу "arc clock"!

5
ответ дан 1 December 2019 в 14:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: