使用视频作为启动画面而不是图片

20

我正在做Android编程教程中的启动画面,其中你需要显示一个图片或文字5秒钟,然后进入主应用程序。我的问题是...我想要显示一个视频文件5秒钟,然后进入应用程序下一页,而不是文本或图片。

我不是在谈论应用程序加载时,而是当它加载完成并且你编写代码在一个独立的Java和XML页面上显示一些内容,然后移动到其他内容...这是我的当前代码。

@Override
protected void onCreate(Bundle SplashScreen1) {
    // TODO Auto-generated method stub
    super.onCreate(SplashScreen1);
    setContentView(R.layout.splash);
    ourSong = MediaPlayer.create(Splash.this, R.raw.splashsound);
    ourSong.start();
    Thread timer = new Thread(){
        public void run(){
            try{
                sleep(5000);
            } catch (InterruptedException e){
                e.printStackTrace();
            }finally{
                Intent openStartingPoint = new Intent("com.Player.Splash.STARTINGPOINT");
                startActivity(openStartingPoint);

            }
        }
    };
    timer.start();

}

@Override
protected void onPause() {
    // TODO Auto-generated method stub
    super.onPause();
    ourSong.release();
    finish();
}

那我该怎么做才能让它显示一个视频媒体文件,但不带开始/停止等控制按钮呢?

5个回答

17

1) 创建 SplashScreen.java 类。

2) 在 res 目录下创建一个 raw 文件夹(res/raw)。

3) 将您的 mp4 视频文件粘贴到此 raw 文件夹中(如果您没有任何示例 mp4 文件,则可以从下面的链接下载)。 http://www.mediafire.com/download/p05ki89i2dt5x2x/splash.mp4

4) 然后在您的 SplashScreen.java 类中添加以下代码。

public class SplashScreenActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    try {
        VideoView videoHolder = new VideoView(this);
        setContentView(videoHolder);
        Uri video = Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.splash);
        videoHolder.setVideoURI(video);

        videoHolder.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
            public void onCompletion(MediaPlayer mp) {
                jump();
            }
        });
        videoHolder.start();
    } catch (Exception ex) {
        jump();
    }
}

@Override
public boolean onTouchEvent(MotionEvent event) {
    jump();
    return true;
}

private void jump() {
    if (isFinishing())
        return;
    startActivity(new Intent(this, MainActivity.class));
    finish();
}

}

注意:splash_activity.xml不是必需的。


1
视频能否居中显示? - Thecave3
1
@Thecave3 是的,你可以在 FrameLayout 中使用 VideoView,并添加 layout_gravity="center" 属性。 - Ariel Carbonaro
3
我已经在几个月前实施了这个解决方案,但结果是质量严重下降。我认为最好的解决方案是分割视频并创建动画视图。 - Thecave3

9

6

1
imgAnim=(VideoView)findViewById(R.id.animimage);

String uriPath = "android.resource://com.petnvet/" + R.drawable.vidio;
Uri uri = Uri.parse(uriPath);
imgAnim.setVideoURI(uri);
imgAnim.requestFocus();
imgAnim.start();
//  imgAnim.setVideoPath("android.resource://com.myapplication/" + R.drawable.vidio);
int SPLASH_DISPLAY_LENGTH = 3000;
new Handler().postDelayed(new Runnable() {
    @Override
    public void run() {
        Intent mainIntent = new Intent(SplashScreen.this, Login.class);
        startActivity(mainIntent);
        finish();
    }
}, SPLASH_DISPLAY_LENGTH);

0

这里是添加视频的代码。如果您需要在视频上添加控件,例如暂停或搜索等,可以使用以下方式添加:

vv.setMediaController(new MediaController(this));

代码的其余部分:

VideoView vv;

@Override

protected void onCreate(Bundle savedInstanceState)

{

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_splash);

    vv=(VideoView)findViewById(R.id.videoView);
    Uri path=Uri.parse("android:resource://"+getPackageName()+"/"+R.raw.hello);
    vv.setVideoURI(path);
    vv.setMediaController(new MediaController(this));

   vv.setOnCompletionListener(new MediaPlayer.OnCompletionListener()
   {
       @Override
       public void onCompletion(MediaPlayer mp) {
           Intent in=new Intent(splash.this,MainActivity.class);
        startActivity(in);
           finish();

       }
   });
    vv.start();

1
不需要用错误的代码一遍又一遍地重复相同的答案。 - Kishan Solanki

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接