【问题标题】:Rotate ImageView in widget在小部件中旋转 ImageView
【发布时间】:2011-05-11 22:38:42
【问题描述】:

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

我可以看到以前在这个应用程序中已经完成了:https://market.android.com/details?id=com.lanteanstudio.compass

【问题讨论】:

    标签: android android-widget widget


    【解决方案1】:

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

    相反,您需要创建一个新的 RemoteViews 并旋转图像 - 您需要先旋转位图,然后再将其设置为 ImageView

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

    【讨论】:

    • 据我所知,这给出了以下错误:05-12 08:48:01.540: WARN/AppWidgetHostView(356): android.widget.RemoteViews$ActionException: view: android.widget。 ImageView 不能使用 RemoteViews 的方法:setRotation(float)
    • 是的,我不确定 setRotation 是否是 Remoteable - 显然不是。在这种情况下,您可能需要在调用 setImageBitmap 之前旋转实际的位图
    • 很高兴听到这个消息 - 更新了我的答案,以反映如果将来有人看到这个问题,旋转位图本身是正确的路线。
    【解决方案2】:

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

    • R.drawable.arrow 在我的 drawable 文件夹中是 png

    • windDeg 是从 openweathermap.org 获得的 int

    • 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)
      

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-19
      • 2023-03-14
      • 1970-01-01
      相关资源
      最近更新 更多