cocos2d-x视频播放添加跳过按钮
之前做了个cocos2dx的视频播放扩展cocos2dx_videoview_extends, 一直都是点击屏幕就跳过视频, 这样玩家容易误操作. 一般的方法是添加一个”跳过”按钮
##Android google之后发现, SurfaceView 是没法在添加一个子view的, 也就是说没办法 SurfaceView.addView(View)
但是我们的SurfaceView是添加到Activity 获取到的ViewGroup里的, 那我们能否添加另外一个View到这个ViewGroup里, 并且层次在SurfaceView之上呢? 经过试验是可以的.
final VideoView videoView = new VideoView(instance);
videoView.setLuaOnFinishCallback(luaCallback);
try {
AssetFileDescriptor afd = instance.getAssets().openFd(
name);
videoView.setVideo(afd);
final ViewGroup group = (ViewGroup) instance
.getWindow().getDecorView();
group.addView(videoView);
videoView.setZOrderMediaOverlay(true);
TextView skipButton = new TextView(this.appActivity);
skipButton.setText("跳过 >>");
skipButton.setTextColor(Color.argb(180, 255, 255, 255));
skipButton.setTextSize(20);
group.addView(skipButton);
} catch (IOException e) {
e.printStackTrace();
videoView.onVideoFinish();
}
于是重构一下, 把button添加到videoView中管理, 因为需要统一将videoView和button在播放结束时移除
public VideoView(AppActivity appActivity) {
super(appActivity);
this.appActivity = appActivity;
Log.i(TAG, "new VideoView");
final SurfaceHolder holder = getHolder();
holder.addCallback(this);
this.addSkipButton();
}
private void addSkipButton(){
skipButton = new TextView(this.appActivity);
skipButton.setText("跳过 >>");
skipButton.setTextColor(Color.argb(180, 255, 255, 255));
skipButton.setTextSize(20);
skipButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
....
}
});
//获取ViewGroup 并添加button
((ViewGroup) this.appActivity.getWindow().getDecorView()).addView(
skipButton);
}
运行代码之后奇怪了, button并没有显示出来? debug之后发现, 是因为, 原来ViewGroup先添加了videoView 再添加button, 那么button自然在videoView 之上; 修改完之后, 顺序颠倒了!
那么可以在surfaceCreated 回调函数添加代码:
skipButton.bringToFront();
还有个问题, 就是现在添加的button是在左上角, 如何做定位? 利用 LayoutParams, 查看Cocos2dxActivity源码, 发现其使用的是FrameLayout, 那么好, 利用其进行定位:
FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(
skipButton.getWidth(), skipButton.getHeight());
params.leftMargin = (int) (getWidth() * 0.8);
params.topMargin = (int) (getHeight() * 0.86);
skipButton.setLayoutParams(params);
##iOS
iOS则简单的多, 因为播放器的view 是可以 addSubview 添加子view的, 于是:
UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[button addTarget:self action:@selector(handleTap:) forControlEvents:UIControlEventTouchUpInside];
[button setTitle:@"Skip >>" forState:UIControlStateNormal];
button.frame = CGRectMake(player.view.frame.size.width - 200, player.view.frame.size.height - 50, 160.0, 40.0);
[player.view addSubview:button];