我想要为我的第一个超级棒的Android项目创建一个主屏幕小部件,它会显示那些孩子们最近都在狂热追捧的Arc Clocks时钟。
根据RemoteViews的限制,我认为在实际布局中使用一个ImageView,然后在更新时创建一个或两个ShapeDrawable并将它们绘制到新创建的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限制的小部件中进行绘制?