使用RemoteView设置位图不起作用

ser*_*kye 3 android android-widget

我正在编写一个小部件,我需要在布局上下载并设置一个位图.我试过的一切似乎都不起作用.

我现在创建了一个测试位图来设置视图,[更新]这个工作.

  Bitmap.Config config = Bitmap.Config.ARGB_8888;
  Bitmap bitmap = Bitmap.createBitmap(imageActiveWidth, imageHeight, config); 
  Canvas canvas =  new Canvas(bitmap); // Load the Bitmap to the Canvas
  Paint paint = new Paint();
  paint.setColor(0xFFFFCCFF);
  canvas.drawRect(0, 0, imageActiveWidth, imageHeight, paint); 
  views.setImageViewBitmap(resId, bitmap);
Run Code Online (Sandbox Code Playgroud)

使用资源文件确实有效:

  Bitmap placeholderBitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.placeholder_medium);
  views.setImageViewBitmap(imageSlotId, placeholderBitmap);
Run Code Online (Sandbox Code Playgroud)

但是,使用下载的位图似乎不起作用.(在异步任务下载了位图之后,我有一个方法setBitmap,它是一行:

 views.setImageViewBitmap(resId, proxy);
Run Code Online (Sandbox Code Playgroud)

结果 - 屏幕只是白色,没有位图

我真的很难理解如何让它工作,因为我需要能够下载位图并设置它们.

ser*_*kye 5

找到了解决方案.我认为它与此错误有关:http://code.google.com/p/android/issues/detail? id = 8489

通过将setBitmap方法更改为以下内容来解决:

private void setBitmap(RemoteViews views, int resId, Bitmap bitmap){
    Bitmap proxy = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ARGB_8888);
    Canvas c = new Canvas(proxy);
    c.drawBitmap(bitmap, new Matrix(), null);
    views.setImageViewBitmap(resId, proxy);
}
Run Code Online (Sandbox Code Playgroud)

我需要打电话: AppWidgetManager.getInstance(context).updateAppWidget(appWidgetId, views);
在位图设置之后.

出于某种原因,当我回到它时,这是行不通的.我的视图是一个AdapterViewFlipper,所以我使用上面的方法调用widgetManager.notifyAppWidgetViewDataChanged(appWidgetId, R.id.content);导致位图呈现.