在窗口小部件中旋转ImageView

时间:2011-05-11 22:38:43

标签: android android-widget widget

我正在创建一个我需要旋转ImageView的小部件。 ImageView位于一个布局中,而布局又在RemoteView中描述。这可能吗?在我的常规应用程序中,Activity使用findViewById()然后调用setRotate()获得了对ImageView的引用,但由于RemoteView不是活动,因此findViewById()不可用。

我可以看到之前在此应用中已完成:https://market.android.com/details?id=com.lanteanstudio.compass

2 个答案:

答案 0 :(得分:4)

如果您使用RemoteViews,则无法直接更改可见的View本身,因为无法获取对它的引用 - RemoteViews对象通常在不同的进程中运行(对于主屏幕上的小部件,这是真的 - 小部件在主屏幕进程中运行,而不是您自己的。)

相反,您需要在旋转图像的情况下创建新的RemoteViews - 您需要先旋转位图,然后再将其设置为ImageView

然后获取AppWidgetManager的实例,并致电manager.updateAppWidget(appWidgetId, remoteView)

答案 1 :(得分:0)

花了一天的时间后...我发现以下代码可用于我的天气应用程序小部件,以指示风向。

  • R.drawable.arrow是我的可绘制文件夹中的png

  • windDeg是从openweathermap.org获得的一个整数

  • R.id.wind_direction是一个ImageView

     val bmpOriginal: Bitmap = BitmapFactory.decodeResource(context.applicationContext.resources,         R.drawable.arrow)
     val bmpResult = Bitmap.createBitmap(bmpOriginal.width, bmpOriginal.height, Bitmap.Config.ARGB_8888)
     val tempCanvas = Canvas(bmpResult)
     tempCanvas.rotate(windDeg.toFloat(), bmpOriginal.width / 2.toFloat(), bmpOriginal.height / 2.toFloat())
     tempCanvas.drawBitmap(bmpOriginal, 0f, 0f, null)
     views.setImageViewBitmap(R.id.wind_direction, bmpResult)