2

私のアプリケーションでは、画像をクリック可能にし、クリックすると、より大きなバージョンの画像を含む別のダイアログ タイプのアクティビティが起動されます。問題は、方向が変更されるたびに、背面の一時停止されたアクティビティが黒く点滅することです。向きの変化をアニメーション化していないようです。一時停止したアクティビティのみが黒く点滅します。

実行中のアクティビティのコードは次のとおりです。

public class ImageDialog extends Activity {

    private ImageView mDialog;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.image_dialog);
        mDialog = (ImageView)findViewById(R.id.imageView2);
        boolean tabletSize = getResources().getBoolean(R.bool.isTablet);
        if (tabletSize) {
            // do something
        } else {
            int orientationMode = getResources().getConfiguration().orientation;
            if (orientationMode == 1) {
               changeViewPlease();
            }
        }




    }
    public void onScreenClickClose(View view) {
        finish();
    }
    public void changeViewPlease() {
        this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
    }
}

および使用されているスタイル:

      <style name="myDialogTheme" parent="@android:style/Theme.Dialog">
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowFrame">@null</item>
    <item name="android:background">@android:color/transparent</item>
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowIsFloating">true</item>
    <item name="android:backgroundDimEnabled">true</item>
    <item name="android:backgroundDimAmount">.8</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowFullscreen">true</item>
   </style>

レイアウト xml シート:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/image_dialog_root"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:onClick="onScreenClickClose" >

    <ImageView
        android:id="@+id/imageView2"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="center"
        android:src="@drawable/image1largerotated" />

</FrameLayout>

みんな、ありがとう!

4

2 に答える 2

1

問題は、方向が変更されるたびに、背面の一時停止されたアクティビティが黒く点滅することです

これは、方向が変更されたときにバックグラウンド アクティビティが破棄され、再度作成されるために発生する可能性があります。これは、アクティビティのデフォルトの動作です。

android:configChanges="orientation"バックグラウンド アクティビティ タグの AndroidManifest で処理することにより、バックグラウンド アクティビティの再作成を回避することで、これを試すことができます。

これも試してみることができます。

于 2012-11-22T02:43:46.083 に答える
0

これは中途半端な解決策であり、onCreate() 後の向きの変更はまだ考慮されていません。

これを一時停止したアクティビティに追加します。

@Override
protected void onPause() {
    // TODO Auto-generated method stub
    super.onPause();
int orientationMode = getResources().getConfiguration().orientation;
if (orientationMode == 1) {
    this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
} else {
    this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}
}

@Override
protected void onResume() {

    super.onResume();
    this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
}

android:screenOrientation="landscape" をマニフェストに:

<activity android:name=".ImageDialog" android:theme="@style/myDialogTheme" 
   android:screenOrientation="landscape">  

なぜこれが機能するのかよくわかりません!

于 2012-11-22T02:16:10.230 に答える