标签:android style blog http ar io color os 使用
一般在游戏中,经常会有一段游戏故事背景视频,而且有一个跳过的按钮,点击后会跳过视频进入游戏。经过资料搜索,一般在Unity的话,在手机终端会调用
Handheld.PlayFullScreenMovie("test.mp4",Color.black,
FullScreenMovieControlMode.CancelOnInput);
最后一个参数总共有4种:
FullScreenMovieControlMode.CancelOnInput,
FullScreenMovieControlMode.Full,
FullScreenMovieControlMode.Hidden,
FullScreenMovieControlMode.Minimal;
而且一般都会在voidStart()调用。不过该方法不可控制,播放一次后就消失了,无法满足自己的需求。
经过多次尝试,最后还是在Android中实现了该效果。具体实现代码如下:
package com.benny.test;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.widget.Button;
import android.widget.VideoView;
import com.unity3d.player.UnityPlayerActivity;
public class MyUnityVideoTestActivity extends UnityPlayerActivity {
private final String TAG = "My Unity Video";
/** 当前的焦点内容 **/
private View currView;
/** 包含VideoView的内容 **/
private ViewGroup newView;
private VideoView video;
private Handler handler = new Handler();
private Runtime rt = Runtime.getRuntime();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
currView = getCurrentFocus();
Log.i(TAG, currView.toString());
/** 测试内存 **/
Log.i(TAG, "onCreate free=" + rt.freeMemory());
}
public void showVideoView() {
handler.post(new Runnable() {
@Override
public void run() {
/** 隐藏当前的页面内容 必须隐藏 **/
currView.setVisibility(View.GONE);
newView = (ViewGroup)View.inflate(MyUnityVideoTestActivity.this, R.layout.main, null);
/** 添加含有VideoView的页面内容 **/
addContentView(newView, new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
/** 测试内存 **/
Log.i(TAG, "addNewView free=" + rt.freeMemory());
video = (VideoView)newView.findViewById(R.id.video_view);
Button btn = (Button)newView.findViewById(R.id.skip);
video.setVideoURI(Uri.parse("android.resource://com.benny.test/"+R.raw.nimble_logo));
video.requestFocus();
video.start();
video.setOnCompletionListener(new OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
removeNewView();
}
});
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
video.stopPlayback();
removeNewView();
}
});
}
});
}
private void removeNewView() {
if (newView != null) {
newView.removeAllViews();
/** 隐藏含有VideView的页面内容 只能隐藏没有办法remove **/
newView.setVisibility(View.GONE);
/** 显示原来当前的页面内容 **/
currView.setVisibility(View.VISIBLE);
/** 测试内存 **/
Log.i(TAG, "removeNewView free=" + rt.freeMemory());
}
}
}main.xml文件如下:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#ffffff" >
<Button
android:id="@+id/skip"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right|top"
android:text="跳过"/>
<VideoView
android:id="@+id/video_view"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical" />
</FrameLayout>
视频放在res->raw文件夹中:
实现的原理,就是在UnityPlayerActivity下,通过addConentView添加我自定义的Video布局,
可以任意添加所需的控件,播放结束后需要将新添加的newView隐藏,目前没有办法将add的newView给remove掉。
至于其中的细节问题,都已经有注释了。
然后将Android项目添加到Unity项目中的Plugins文件夹中,至于如何添加,可以参考雨松MOMO的文章,见http://www.xuanyusong.com/archives/667
最后就是在Unity的脚本语言中直接调用Java代码即可
void Start () {
#if UNITY_ANDROID
// Handheld.PlayFullScreenMovie("nimble_logo.mp4", Color.black, FullScreenMovieControlMode.Hidden,
// FullScreenMovieScalingMode.AspectFit);
using (AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer")) {
using (AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity")) {
jo.Call("showVideoView");
}
}
#endif
......
}该脚本是我一个场景中的脚本,这样的话,进入该场景直接能看到视频,即跳过按钮,视频播放完毕或者点击跳过按钮,就能进入到场景了,期间不会有任何画面上的异样,基本无缝对接。
PS:关于Unity视频播放添加可控制按钮,我在网上搜了很多资料,可惜很多都是转贴,大部分都是在脚本中调用Handheld.PlayFullScreenMovie,
根本就么找到一个可用的方案,也或许我的搜索关键字有问题吧。
后来经过多次尝试,终于找到这个比较完美的方案了,贴出来就是希望能给大家一些提示吧。
目前这个addContentView在我们公司的cocos2d-x关于EditText的使用,
我也用了类似的方法,可以使输入框将界面往上顶。
好了,大家可以按照我的方案自己进行尝试了,不发源码也是希望大家能自己动手尝试
一下并加深印象,如有问题可以留言。
标签:android style blog http ar io color os 使用
原文地址:http://blog.csdn.net/xcookies/article/details/41990951