旋转 ImageView [重复]
Posted
技术标签:
【中文标题】旋转 ImageView [重复]【英文标题】:Rotate an ImageView [duplicate] 【发布时间】:2016-02-12 07:29:40 【问题描述】:我正在为 android 设计(尝试学习)一个简单的小部件。 我有:
public class NewAppWidget extends AppWidgetProvider
在那个类中,我有简单的代码:
public double angle(Calendar calendarDate)
//Earth rotation;
int day = calendarDate.get(Calendar.DAY_OF_YEAR);
int angle;
angle = (day / 365) * 360;
return angle;
然后我想选择一个图像并在 ImageView 中将其旋转该角度,这完全不起作用...
static void updateAppWidget(Context context, AppWidgetManager appWidgetManager,
int appWidgetId)
// Construct the RemoteViews object
ImageView image = (ImageView) findViewById(R.layout.new_app_widget);
image.setImageResource(R.drawable.moon10);
image.setRotation(angle);
// Instruct the widget manager to update the widget
appWidgetManager.updateAppWidget(appWidgetId, new_app_widget);
那里可能有几个错误 - 我是初学者。
Android studio 突出显示的三个错误是:
-
findViewById 为红色(无法解析方法)
红色角度(无法解析符号角度)
new_app_widget 在最后一行显示为红色(无法解析符号)
感谢您的帮助,祝您有美好的一天。
JY
【问题讨论】:
注意:对于你的标题 1)Android Studio 只是一个 IDE,它与问题无关。 2)Android代码(大部分)是Java,所以你不需要说“Java代码” 我投票重新打开这个问题,因为它不是重复的:它不是关于旋转“正常”视图,因为 OP 想要旋转作为 RemoteViews 一部分的 ImageView,其中(参见我的回答)“View.setRotation()”是不可能的。 OP 主要是因为缺乏经验而接受了“重复”,但未来的读者在寻找涉及应用小部件(主屏幕小部件)的解决方案时,不应将其引导至链接的帖子,而应指向此帖子。 【参考方案1】:-
由于该方法是静态的,您需要为 findviewbyid() 创建视图;
或使 void 非静态
旋转角度必须是 int,而不是 double
【讨论】:
【参考方案2】:要获得方向,请使用以下函数。只需传递图像路径的上下文和 Uri
public static int getGalleryOrientation(Context context, Uri path)
/* it's on the external media. */
Cursor cursor = context.getContentResolver().query(path,
new String[]MediaStore.Images.ImageColumns.ORIENTATION,
null, null, null);
if (cursor.getCount() != 1)
return -1;
cursor.moveToFirst();
return cursor.getInt(0);
【讨论】:
我看不出这是如何解决问题的...您如何从R.drawable
获取 URI?
感谢@cricket_007 教授如何发送答案。
我所做的只是重新格式化您的答案,我仍然不明白【参考方案3】:
TL;DR
不可能将View.setRotation(float)
方法与作为主屏幕小部件 一部分的任何View
一起使用,至少这是我的IDE 告诉我的:
W/AppWidgetHostView﹕updateAppWidget 找不到任何视图,使用错误视图 android.widget.RemoteViews$ActionException: view: android.widget.ImageView can't use method with RemoteViews: setRotation(float)
话虽如此,让我们至少让您的应用小部件启动并运行 :)
您需要一个带有ImageView
的布局文件,我们称之为new_app_widget.xml
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_
android:layout_
android:padding="@dimen/widget_margin"
android:background="#09C">
<ImageView
android:layout_
android:layout_
android:background="#ffffff"
android:id="@+id/imageView"
android:layout_gravity="center"
/>
</FrameLayout>
像这样更改您的代码:
static void updateAppWidget(Context context, AppWidgetManager appWidgetManager,
int appWidgetId)
// Construct the RemoteViews object
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.new_app_widget);
// use the RemoteViews methods to access the children of the FrameLayout:
views.setImageViewResource(R.id.imageView, R.drawable.moon10);
// Instruct the widget manager to update the widget
appWidgetManager.updateAppWidget(appWidgetId, views);
如果您需要一些旋转,您必须在 Drawable
上执行它,然后像上面一样使用旋转的 Drawable
调用 setImageViewResource()
。
另见Rotating a drawable in Android
最后,关于:
红色角度(无法解析符号角度)
您已经定义了一个方法angle(Calendar)
。如果你想使用它,你需要通过一些Calendar
输入来调用它。
【讨论】:
啊,我以为 ImageView 只是一个常规视图,我的错! 虽然我读到我们应该避免像“谢谢”这样的cmets,但我不得不说!它完全有效,问题解决了,美好的周末即将结束。 @Jean-Yves - 感谢您让我知道 :) 您可以通过单击答案左上角的复选标记来表明答案解决了您的问题。当然,您最终也可以对其进行投票。一方面,这会给我带来一些“声誉点”。另一方面,对于在未来寻找解决自己问题的方法的人来说,这对(问题和答案)将更容易找到。如果“重复”状态阻止了这些操作中的任何一个,那么,没关系。这很有趣:D 您好,我的声望太低,无法为您投票……抱歉,我会及时赶到……可能会…… @Jean-Yves 只要继续问这样的问题(或不时写一个答案),你会做得很好;)但老实说,不要介意投票。 堆栈溢出 就像在现实生活中一样:有些事情很有趣。时不时地做一个小代表不会受到伤害。但是一个很好的谜题或一个让我发现新事物的问题更好:)以上是关于旋转 ImageView [重复]的主要内容,如果未能解决你的问题,请参考以下文章