2011-05-12 55 views
8

嘿,当我旋转手机时,我的活动重新启动。我有一个视频播放视频,我旋转和视频重新启动。现在,我发现在添加此我的活动清单固定它旋转手机在Android上重新启动视频

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

现在的问题是视频控件没有正在重绘,直到他们消失了,回来,从而留下要么很长的控制会从横向到纵向模式或从肖像到风景的真正短的控制。一旦他们消失,然后我点击让他们回来,然后他们正确的大小。有没有更好的方法来做到这一点?

回答

21

添加

android:configChanges="orientation"

在AndroidManifest.xml中的活动。

  • 解决了我的问题不会再次下载逐行扫描视频..

如果你的目标API级别13或更高,则必须说明here包括除orientationscreenSize值。所以你的标签可能看起来像

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

什么生命周期事件旋转时,叫什么名字?我很快搜索了一下,结果出现了。我看到'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

哦,好吧!我只是在我的第二周的Java如此裸露与我....我现在如何重绘控件?我试过'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 
    } 
}