我正在创建一个我需要旋转ImageView的小部件。 ImageView位于一个布局中,而布局又在RemoteView中描述。这可能吗?在我的常规应用程序中,Activity使用findViewById()然后调用setRotate()获得了对ImageView的引用,但由于RemoteView不是活动,因此findViewById()不可用。
我可以看到之前在此应用中已完成:https://market.android.com/details?id=com.lanteanstudio.compass
答案 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)