用于横向图像旋转的纵向

时间:2015-10-30 09:35:57

标签: android android-layout android-orientation

我有一个活动,它只是在中心显示一个图像,图像的宽度与父级和高度匹配,包装内容。我希望imageView在旋转设备时旋转。因此,假设我将设备旋转到横向模式,图像应该填满整个宽度(实际设备高度),高度应该包裹内容。我怎样才能实现这个功能?

这是我的AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.galleri5.android" >

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

    <uses-feature
        android:name="android.hardware.camera"
        android:required="false" />

    <application
        android:name=".Galleri5Application"
        android:allowBackup="true"
        android:debuggable="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:largeHeap="true"
        android:theme="@style/AppTheme" >
        <receiver
            android:name="com.google.android.gms.analytics.AnalyticsReceiver"
            android:enabled="true" >
            <intent-filter>
                <action android:name="com.google.android.gms.analytics.ANALYTICS_DISPATCH" />
            </intent-filter>
        </receiver>

        <service
            android:name="com.google.android.gms.analytics.AnalyticsService"
            android:enabled="true"
            android:exported="false" />

        <receiver
            android:name="com.google.android.gms.analytics.CampaignTrackingReceiver"
            android:exported="true" >
            <intent-filter>
                <action android:name="com.android.vending.INSTALL_REFERRER" />
            </intent-filter>
        </receiver>

        <service android:name="com.google.android.gms.analytics.CampaignTrackingService" />

        <meta-data
            android:name="com.facebook.sdk.ApplicationId"
            android:value="@string/facebook_app_id" />

        <activity
            android:name=".activities.LaunchActivity"
            android:label="@string/app_name"
            android:screenOrientation="portrait" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name="com.facebook.FacebookActivity"
            android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
            android:label="@string/app_name"
            android:theme="@android:style/Theme.Translucent.NoTitleBar" />
        <activity
            android:name=".activities.SignInActivity"
            android:label="@string/title_activity_sign_in"
            android:screenOrientation="portrait" >
        </activity>
        <activity
            android:name=".activities.EmailSignInActivity"
            android:label="@string/title_activity_email_sign_in"
            android:screenOrientation="portrait" >
        </activity>
        <activity
            android:name=".activities.InfoActivity"
            android:label="@string/title_activity_info"
            android:screenOrientation="portrait" >
        </activity>
        <activity
            android:name=".activities.SelfieActivity"
            android:label="@string/title_activity_selfie"
            android:screenOrientation="portrait" >
        </activity>
        <activity
            android:name=".activities.PhotoAdjustActivity"
            android:label="@string/title_activity_photo_adjust"
            android:screenOrientation="portrait" >
        </activity>
        <activity
            android:name=".activities.GetStartedActivity"
            android:label="@string/title_activity_get_started"
            android:screenOrientation="portrait" >
        </activity>
        <activity
            android:name=".activities.RecommendedGalleriesActivity"
            android:label="@string/title_activity_recommended_galleries"
            android:screenOrientation="portrait" >
        </activity>
        <activity
            android:name=".activities.TipsActivity"
            android:label="@string/title_activity_tips"
            android:screenOrientation="portrait" >
        </activity>
        <activity
            android:name=".activities.HomeActivity"
            android:label="@string/title_activity_home"
            android:screenOrientation="portrait" >
        </activity>
        <activity
            android:name=".activities.UserProfileActivity"
            android:label="@string/title_activity_user_profile"
            android:screenOrientation="portrait" >
        </activity>
        <activity
            android:name=".activities.ImageActivity"
            android:label="@string/title_activity_image"
            android:screenOrientation="portrait"
            android:windowSoftInputMode="stateHidden" >
        </activity>
        <activity
            android:name=".activities.GalleryActivity"
            android:label="@string/title_activity_architecture"
            android:screenOrientation="portrait" >
        </activity>
        <activity
            android:name=".activities.FbImageSelectionActivity"
            android:label="@string/title_activity_fb"
            android:screenOrientation="portrait" >
        </activity>
        <activity
            android:name=".activities.TestActivity"
            android:label="@string/title_activity_test" >
        </activity>
        <activity
            android:name=".activities.AddCaptionActivity"
            android:label="@string/title_activity_add_caption"
            android:screenOrientation="portrait" >
        </activity>
        <activity
            android:name=".activities.SelectGalleryActivity"
            android:label="@string/title_activity_select_gallery"
            android:screenOrientation="portrait"
            android:windowSoftInputMode="stateHidden" >
        </activity>
        <activity
            android:name=".activities.SettingsActivity"
            android:label="@string/title_activity_settings"
            android:screenOrientation="portrait" >
        </activity>
        <activity
            android:name=".activities.EditProfileActivity"
            android:label="@string/title_activity_edit_profile"
            android:screenOrientation="portrait" >
        </activity>
        <activity
            android:name=".activities.HiFiveActivity"
            android:label="@string/title_activity_hi_five"
            android:screenOrientation="portrait" >
        </activity>
        <activity
            android:name=".activities.MessagesActivity"
            android:label="@string/title_activity_messages"
            android:screenOrientation="portrait" >
        </activity>
        <activity
            android:name=".activities.SearchActivity"
            android:label="@string/title_activity_search"
            android:screenOrientation="portrait"
            android:windowSoftInputMode="stateHidden" >
        </activity>
        <activity
            android:name=".activities.CommentsActivity"
            android:label="@string/title_activity_comments"
            android:screenOrientation="portrait" >
        </activity>
        <activity
            android:name=".activities.DiscoverActivity"
            android:label="@string/title_activity_discover"
            android:screenOrientation="portrait" >
        </activity>
        <activity
            android:name=".activities.TOCActivity"
            android:label="@string/title_activity_toc"
            android:screenOrientation="portrait" >
        </activity>
        <activity
            android:name=".activities.HelpActivity"
            android:label="@string/title_activity_help"
            android:screenOrientation="portrait"
            android:windowSoftInputMode="stateHidden" >
        </activity>
        <activity
            android:name=".activities.KarmaActivity"
            android:label="@string/title_activity_karma"
            android:screenOrientation="portrait" >
        </activity>
        <activity
            android:name=".activities.HowKarmaWorks"
            android:label="@string/title_activity_how_karma_works"
            android:screenOrientation="portrait" >
        </activity>
        <activity
            android:name=".activities.HiFiveOrNotActivity"
            android:label="@string/title_activity_hi_five_or_not"
            android:screenOrientation="portrait" >
        </activity>
        <activity
            android:name=".activities.DiscoverTalentsActivity"
            android:label="@string/title_activity_discover_talents"
            android:screenOrientation="portrait" >
        </activity>

        <meta-data
            android:name="io.fabric.ApiKey"
            android:value="494aaf4ca421e4bdd34df14063fae3a229af051c" />

        <activity
            android:name=".activities.UserStudioFansActivity"
            android:label="@string/title_activity_user_studio_fans"
            android:screenOrientation="portrait" >
        </activity>
        <activity
            android:name=".activities.UserStudioBookmarksActivity"
            android:label="@string/title_activity_user_studio_bookmarks"
            android:screenOrientation="portrait" >
        </activity>
        <activity
            android:name=".activities.UserStudioGalleriesActivity"
            android:label="@string/title_activity_user_studio_galleries"
            android:screenOrientation="portrait" >
        </activity>
        <activity
            android:name=".activities.UserHiFiveDetailsActivity"
            android:label="@string/title_activity_user_hi_five_details"
            android:screenOrientation="portrait" >
        </activity>
        <activity
            android:name=".activities.GalleryGridActivity"
            android:label="@string/title_activity_gallery_grid"
            android:screenOrientation="portrait" >
        </activity>
        <activity
            android:name=".activities.LeaderboardActivity"
            android:label="@string/title_activity_leaderboard"
            android:screenOrientation="portrait" >
        </activity>
        <activity
            android:name=".activities.GalleryFollowersActivity"
            android:label="@string/title_activity_gallery_followers"
            android:screenOrientation="portrait" >
        </activity>
        <activity
            android:name=".activities.AddNewGalleryActivity"
            android:label="@string/title_activity_add_new_gallery"
            android:screenOrientation="portrait" >
        </activity>
        <activity
            android:name=".activities.AllGalleriesActivity"
            android:label="@string/title_activity_all_galleries"
            android:screenOrientation="portrait"
            android:windowSoftInputMode="stateHidden" >
        </activity>
        <activity
            android:name=".activities.AddToNewGalleryActivity"
            android:label="@string/title_activity_add_to_new_gallery"
            android:screenOrientation="portrait" >
        </activity>
        <activity
            android:name=".activities.TermsAndPrivacyActivity"
            android:label="@string/title_activity_terms_and_privacy"
            android:screenOrientation="portrait" >
        </activity>
        <activity
            android:name=".activities.WinKarmaDummyActivity"
            android:label="@string/title_activity_win_karma_dummy"
            android:screenOrientation="portrait" >
        </activity>
        <activity
            android:name=".activities.HelpModeActivity"
            android:label="@string/title_activity_help_mode"
            android:screenOrientation="portrait" >
        </activity>
        <activity android:name=".activities.OverallLeaderboardActivity" >
        </activity>
        <activity android:name=".activities.SignInHelpActivity" >
        </activity>
        <activity android:name=".activities.FullImageActivity" >
        </activity>
    </application>

</manifest>

有问题的活动是FullImageActivity

编辑问题是,即使我在旋转设备并且手机中已开启自动旋转,图像也不会旋转。

编辑1 当我将屏幕旋转到横向然后再回到肖像时出现错误的Logcat:

10-30 16:37:30.518 4613-4613/com.galleri5.android E/AndroidRuntime: FATAL EXCEPTION: main
10-30 16:37:30.518 4613-4613/com.galleri5.android E/AndroidRuntime: Process: com.galleri5.android, PID: 4613
10-30 16:37:30.518 4613-4613/com.galleri5.android E/AndroidRuntime: java.lang.IllegalArgumentException: View=com.android.internal.policy.impl.PhoneWindow$DecorView{4ad2fb5 V.E..... R......D 0,0-1248,348} not attached to window manager
10-30 16:37:30.518 4613-4613/com.galleri5.android E/AndroidRuntime:     at android.view.WindowManagerGlobal.findViewLocked(WindowManagerGlobal.java:386)
10-30 16:37:30.518 4613-4613/com.galleri5.android E/AndroidRuntime:     at android.view.WindowManagerGlobal.removeView(WindowManagerGlobal.java:312)
10-30 16:37:30.518 4613-4613/com.galleri5.android E/AndroidRuntime:     at android.view.WindowManagerImpl.removeViewImmediate(WindowManagerImpl.java:84)
10-30 16:37:30.518 4613-4613/com.galleri5.android E/AndroidRuntime:     at android.app.Dialog.dismissDialog(Dialog.java:341)
10-30 16:37:30.518 4613-4613/com.galleri5.android E/AndroidRuntime:     at android.app.Dialog.dismiss(Dialog.java:324)
10-30 16:37:30.518 4613-4613/com.galleri5.android E/AndroidRuntime:     at com.galleri5.android.activities.HomeActivity$2.success(HomeActivity.java:126)
10-30 16:37:30.518 4613-4613/com.galleri5.android E/AndroidRuntime:     at com.galleri5.android.activities.HomeActivity$2.success(HomeActivity.java:118)
10-30 16:37:30.518 4613-4613/com.galleri5.android E/AndroidRuntime:     at retrofit.CallbackRunnable$1.run(CallbackRunnable.java:45)
10-30 16:37:30.518 4613-4613/com.galleri5.android E/AndroidRuntime:     at android.os.Handler.handleCallback(Handler.java:739)
10-30 16:37:30.518 4613-4613/com.galleri5.android E/AndroidRuntime:     at android.os.Handler.dispatchMessage(Handler.java:95)
10-30 16:37:30.518 4613-4613/com.galleri5.android E/AndroidRuntime:     at android.os.Looper.loop(Looper.java:135)
10-30 16:37:30.518 4613-4613/com.galleri5.android E/AndroidRuntime:     at android.app.ActivityThread.main(ActivityThread.java:5254)
10-30 16:37:30.518 4613-4613/com.galleri5.android E/AndroidRuntime:     at java.lang.reflect.Method.invoke(Native Method)
10-30 16:37:30.518 4613-4613/com.galleri5.android E/AndroidRuntime:     at java.lang.reflect.Method.invoke(Method.java:372)
10-30 16:37:30.518 4613-4613/com.galleri5.android E/AndroidRuntime:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:898)
10-30 16:37:30.518 4613-4613/com.galleri5.android E/AndroidRuntime:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:693)

1 个答案:

答案 0 :(得分:0)

据我所知,你有两种选择。

  • 考虑两个不同的图像;一个用于纵向,一个用于横向。将它们放到相应的drawable / mipmap文件夹中。

    drawable / drawable-land / mipmap / mipmap-land
    
  • 以编程方式旋转图像。为此,您应首先确定设备的方向,然后相应地旋转图像。

    • 使用getresources().getconfiguration().orientation确定方向。

    • 使用以下代码旋转图像。

      Matrix matrix = new Matrix();
      matrix.postRotate(90);
      Bitmap rotatedBitmap = Bitmap.createBitmap(bitmap , 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);
      

注意:第一种方法要好得多!