我有一个活动,它只是在中心显示一个图像,图像的宽度与父级和高度匹配,包装内容。我希望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)
答案 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);
注意:第一种方法要好得多!