2011-05-12 20 views
8

私の携帯電話を回転させると、やあ、私の活動が再開します。私はビデオを再生するビデオビューを持って、私は回転し、ビデオが再起動します。今、私は中に私の活動にこれを追加したマニフェスト固定それ回転電話がAndroidで動画を再開します

<activity android:name="Vforum" android:configChanges="orientation"></activity> 

問題は今、彼らは消えて戻ってくるまで、ビデオコントロールは、このように横向きから縦向きに行く本当に長いコントロールのいずれかを残して、再描画されていないですモードか、ポートレイトからランドスケープに向かう本当に短いコントロールです。それらが消えたら、それらを元に戻すためにタップすると、正しいサイズになります。これを行うより良い方法はありますか?

答えて

21

はAndroidManifest.xmlに設定あなたの活動に

android:configChanges="orientation"

を追加:あなたの活動のメソッドをオーバーライドします。

  • は、あなたのターゲットAPIレベル13以上ならば、私の問題は...再び

をプログレッシブビデオをダウンロードしませんhereが説明するように、あなたがorientation値に加えてscreenSize値を含める必要があります解決しました。したがって、あなたのタグは次のように見えます

android:configChanges="orientation|screenSize" 
3

アクティビティライフサイクルイベントのビデオファイルの位置を覚えておくことを検討してください。アクティビティが作成されると、ビデオの位置を取得して、再起動した瞬間から再生することができます。あなたのActivityクラスで

@Override 
protected void onCreate(Bundle bundle){ 
    super.onCreate(bundle); 
    int mPos=bundle.getInt("pos"); // get position, also check if value exists, refer to documentation for more info 
} 

@Override 
protected void onSaveInstanceState (Bundle outState){ 
    outState.putInt("pos", myVideoView.getCurrentPosition()); // save it here 
} 
+0

回転時にどのようなライフサイクルイベントと呼ばれていますか?私はすぐにgoogledと短く来た。私は 'myVideoView.getCurrentPosition()'が現在の時刻を保存するのを見ますが、私が回転していてリセットしているときに、プログレッシブダウンロードも開始されているのを見ています。簡単な例を教えてください。 Sudoのコードは、私のために働くだろう、ありがとう! – Ronnie

+0

電話機を回転させると、現在のActivityインスタンスが破棄され、新しいインスタンスが作成されるため、onCreate()でビデオオブジェクトのバンドルオブジェクトをチェックできます。ビデオの位置をonSaveInstanceState(Bundle)に保存することができます。 http://developer.android.com/reference/android/app/Activity.html –

+0

を参照してください。私が見ているのは、このビデオが将来のある時点から始まるということです。たぶんその次のフレーム、約1秒に沿って。しかし、情報は失われます。誰もどのビデオを失うことなく回転する方法を知っていますか? – Lucy

1

マニフェストにconfigChanges属性を追加するには、あなたがhandle config changes yourselfをすることを意味します。

int lastOrientation = 0; 

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 

    // Checks if orientation changed 
    if (lastOrientation != newConfig.orientation) { 
     lastOrientation = newConfig.orientation; 
     // redraw your controls here 
    } 
} 
+0

Ohhh ok gotcha!私はJavaの私の2番目の週だけで私と一緒に裸....どのように私は今コントロールを再描画するのですか?私は 'mVideoView.refreshDrawableState();'を試み、失敗しました。私はどのメソッドがそれらを再描画するのか知りません。 – Ronnie

+0

ビデオプレーヤーを強制終了するため、全体ビューを再作成したくない場合。あなたは交換する必要のある部品だけを交換する必要があります。基本的には、親ビューグループ(レイアウト)の検索、置き換えられるビューの位置の取得(インデックス)、削除、新しいものの膨張、同じ位置への追加:http://stackoverflow.com/questions/3334048/android-レイアウトの置き換え - ビューと - 別のビュー - オン - ランタイム –

+0

私は標準のMediaControllerを使用しています。私はレイアウトを変更したくありません。再描画が必要なビデオコントロールが組み込まれています。私は何が起こっているのビデオを投稿した:http://www.youtube.com/watch?v=FgRythmUo3A – Ronnie

0

ConfigChangesは正しいですが、このように機能しました。

活動クラスで
<activity 
     android:configChanges="orientation|screenSize" ... > 

とも

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 
    if (lastOrientation != newConfig.orientation) { 
     lastOrientation = newConfig.orientation; 
     // redraw your controls here 
    } 
} 
関連する問題