旋转ImageView

时间:2016-02-12 07:29:41

标签: android imageview

我正在设计(尝试学习)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工作室突出显示的三个错误是:

  1. 以红色查找ViewById(无法解析方法)
  2. 红色角度(无法解析符号角度)
  3. new_app_widget在最后一行显示为红色(无法解析符号)
  4. 感谢您的帮助,祝您度过愉快的一天。

    JY

3 个答案:

答案 0 :(得分:0)

  1. 由于该方法是静态的,您需要创建findviewbyid(); 或使非静态无效
  2. 旋转角度必须为int,而不是double

答案 1 :(得分:0)

要获得方向,请使用以下功能。只需传递上下文和图像路径的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);

}

答案 2 :(得分:0)

<强> TL; DR

无法将方法View.setRotation(float)主屏幕小部件中的任何View一起使用,至少这是我的IDE告诉我的:

  

W / AppWidgetHostView:使用错误视图,updateAppWidget找不到任何视图       android.widget.RemoteViews $ ActionException:view:android.widget.ImageView无法使用RemoteViews方法:setRotation(float)

话虽如此,让我们至少让你的app小部件启动并运行:)

你需要一个ImageView的布局文件,我们称之为 new_app_widget.xml

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:padding="@dimen/widget_margin"
            android:background="#09C">
    <ImageView
        android:layout_width="24dp"
        android:layout_height="24dp"
        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输入来调用它。