【问题标题】:Portrait to Landscape image rotation纵向到横向图像旋转
【发布时间】:2015-10-30 19:09:26
【问题描述】:

我有一个活动,它只在中心显示一个图像,图像的宽度与父级和高度匹配,包装内容。我希望 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)

【问题讨论】:

  • @activesince93 这不是我的问题,我不希望它拉伸以填充父宽度,问题是即使我旋转设备,图像也没有旋转。
  • 显示您的 AndroidManifest.xml 文件
  • @activesince93 添加了 AndroidManifest.xml 文件
  • 你能在OverallLeaderboardActivity和SignInHelpActivity上做屏幕旋转吗?

标签: android android-layout android-orientation


【解决方案1】:

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

  • 考虑两个不同的图像;一张是纵向的,一张是横向的。将它们放到相应的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);
      

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

【讨论】:

  • 我不认为第一种方法对我有用,因为我没有显示静态图像。图片是从后端实时拉取的。
  • 另外,你知道为什么我的其他活动没有旋转,即使我没有在 AndroidManifest 中设置纵向模式并且我已经自动旋转了吗?
  • @AmitTiwari 所以,你可以试试第二个!
  • @AmitTiwari 你已经设置好了android:screenOrientation="portrait"
  • 我还没有为我的 FullImageActivity 设置它。查看我的 AndroidManifest.xml 文件。
猜你喜欢
  • 2015-10-25
  • 2023-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-27
  • 2023-04-06
  • 1970-01-01
相关资源
最近更新 更多