对于我的第一个也是最棒的 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 约束的小部件中?