0

I have an activity which just shows an image in the center, with the width of image matching parent and height, wrapping content. I want the imageView to rotate on rotating the device. So suppose if I rotate the device to landscape mode, the image should fill the whole width(actually device height) and height should wrap content. How can I achieve this functionality?

Here is my 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>

The activity in question is FullImageActivity

Edit The problem is, the image is not getting rotated even when I am rotating the device and I have auto-rotation turned on in my phone.

Edit 1 Logcat of error when I rotate screen to landscape and then back to portrait :

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)
Amit Tiwari
  • 3,616
  • 6
  • 29
  • 75

1 Answers1

0

To my knowledge, you've got two options.

  • Considering two different images; one for portrait and one for landscape. Put them to corresponding drawable/mipmap folder.

    drawable / drawable-land / mipmap / mipmap-land
    
  • Rotating image programmically. For this, you should first determine at which orientation the device is, then rotate the image accordingly.

    • Use getresources().getconfiguration().orientation to determine the orientation.

    • Use the following code to rotate the image.

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

Note: The first approach is much better!

frogatto
  • 27,475
  • 10
  • 76
  • 119
  • I don't think the first method would work for me, since I am not showing a static image. The image is pulled from backend in real time. – Amit Tiwari Oct 30 '15 at 10:43
  • also, do you have any idea, why my other activities are not rotating even I haven't set portrait mode in AndroidManifest and I have auto-rotate on? – Amit Tiwari Oct 30 '15 at 10:45
  • @AmitTiwari So, you could try the second one! – frogatto Oct 30 '15 at 10:45
  • @AmitTiwari You've set already `android:screenOrientation="portrait"` – frogatto Oct 30 '15 at 10:47
  • I haven't set that for my FullImageActivity. See my AndroidManifest.xml file. – Amit Tiwari Oct 30 '15 at 10:49
  • I checked that out, it works. Now the screen rotates. But I have new problem, when I first rotate screen to landscape mode and then again to portrait mode, my app crashes. I am getting some error in the previous activity(back stack) of this current activity. – Amit Tiwari Oct 30 '15 at 11:05
  • @AmitTiwari Post stacktrace (Logcat). – frogatto Oct 30 '15 at 11:06
  • @AmitTiwari In your second Activity, do you open any additional `window`? (Dialog, PopupWindow, ...) – frogatto Oct 30 '15 at 11:12
  • no, in the previous activity(HomeActivity), I show a dialog when user logouts – Amit Tiwari Oct 30 '15 at 11:14
  • @AmitTiwari In my experiences, you should close/dismiss all open windows when you want to leave an activity and switch to another one. – frogatto Oct 30 '15 at 11:15
  • there is no open window or dialog when I open my current activity. Actually the HomeActivity is kind of facebook feed which has photos and when you click on any photo, I open this activity to show the image in full screen. In HomeActivity, I have a navigation drawer, which has logout button, onClicking it, I show a dialog for 2 sec that you have been logged out and go back to the sign in screen for users to login again. – Amit Tiwari Oct 30 '15 at 11:18