cocos-webview 添加关闭按钮-android篇
**前言:cocos webview 作为一个独立的容器在ui层级之上,所以我们想通过游戏内ui来操控它是不容易的事情,把操作ui直接加到webview 容器层上,可以解决这个问题 **
观察cocos2dxWebViewHelper 发现,cocos 通过这个类来管理游戏内的webview,所以我们只需要控制好在创建,销毁 webview 的时候,将相关ui做同样的动作即可
这边先实现下关闭按钮的创建。 在 cocos2dxWebViewHelper中添加方法
public static void createSkipButton(int index) {
skipImgBtn = new ImageView(sCocos2dxActivity);
// skipImgBtn.setRotation(90);
//定义矩阵对象
Matrix matrix = new Matrix();
matrix.setRotate(90);
//缩放原图
// matrix.postScale(1.5f, 1.5f);
float w = 0;
float h = 0;
Bitmap bitmap;
Bitmap dstbmp;
bitmap = BitmapFactory.decodeResource(sCocos2dxActivity.getResources(), R.drawable.skip);
dstbmp = Bitmap.createBitmap(bitmap,0,0,bitmap.getWidth(), bitmap.getHeight(),matrix,true);
skipImgBtn.setImageBitmap(dstbmp);
w = dstbmp.getWidth();
h = dstbmp.getHeight();
//获取屏幕尺寸几种方式
// 参考文档 http://blog.csdn.net/ithomer/article/details/6688883
DisplayMetrics dm = new DisplayMetrics();
sCocos2dxActivity.getWindowManager().getDefaultDisplay().getMetrics(dm);
FrameLayout.LayoutParams params = new FrameLayout.LayoutParams((int)w, (int)h);
params.leftMargin = (int) (sCocos2dxActivity.getWindowManager().getDefaultDisplay().getWidth()-w-20);
params.topMargin = (int) (sCocos2dxActivity.getWindowManager().getDefaultDisplay().getHeight()-h);
Cocos2dxWebView view = webViews.get(index);
view.skipImgBtn = skipImgBtn;
btnIndex = index;
skipImgBtn.bringToFront();
sLayout.addView(skipImgBtn,params);
skipImgBtn.invalidate();
skipImgBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
removeWebView(btnIndex);
}
});
}
来创建关闭按钮 添加移除方法
public static void removeSkipBtn(){
if (skipImgBtn!= null){
sLayout.removeView(skipImgBtn);
skipImgBtn = null;
}
}
skipImgBtn 记得在类中声明
private static ImageView skipImgBtn = null;
private static int btnIndex = 0;
方法实现完之后,只需在createWebView 方法中 跟着创建即可
public static int createWebView() {
final int index = viewTag;
sCocos2dxActivity.runOnUiThread(new Runnable() {
@Override
public void run() {
Cocos2dxWebView webView = new Cocos2dxWebView(sCocos2dxActivity, index);
FrameLayout.LayoutParams lParams = new FrameLayout.LayoutParams(
FrameLayout.LayoutParams.WRAP_CONTENT,
FrameLayout.LayoutParams.WRAP_CONTENT);
sLayout.addView(webView, lParams);
webViews.put(index, webView);
createSkipButton(index);
}
});
return viewTag++;
}
在移除中跟着移除
public static void removeWebView(final int index) {
sCocos2dxActivity.runOnUiThread(new Runnable() {
@Override
public void run() {
Cocos2dxWebView webView = webViews.get(index);
if (webView != null) {
webViews.remove(index);
sLayout.removeView(webView);
webView.destroy();
webView = null;
}
removeSkipBtn();
}
});
}
别忘了在显隐控制中,跟着操作
public static void setVisible(final int index, final boolean visible) {
sCocos2dxActivity.runOnUiThread(new Runnable() {
@Override
public void run() {
Cocos2dxWebView webView = webViews.get(index);
if (webView != null) {
webView.setVisibility(visible ? View.VISIBLE : View.GONE);
}
if (skipImgBtn!= null){
skipImgBtn.setVisibility(visible ? View.VISIBLE : View.GONE);
}
}
});
}
这样子就实现了在cocos webview 上添加关闭按钮的功能。