游戏需求参考:cocos2dx游戏嵌入iOS的UIWebView
安卓方面:实现WebView加载,隐藏,显示,移除功能
1.创建WebActivity.java WebActivity类 继承(extends) Cocos2dxActivity类
public class WebActivity extends Cocos2dxActivity{
}
2.WebActivity类中设置全局成员变量
static WebActivity m_webActivity = null; //WebActivity类实例对象
private WebView m_webView; //WebView控件
private LinearLayout m_Layout; //LinearLayout布局
public int m_showType = 0; //webView操作类型:0-打开(加载或显示)1-隐藏 2-移除
public String URLS = "http://www.baidu.com";
public boolean isSuccess = false;
public boolean isError = false;
// 此函数提供给jni调用,返回自身类的对象
public static WebActivity getInstance() {// 返回实例
return m_ webActivity;
}
3.所有的UI操作,放到同一个 this.runOnUiThread()主线程中
public void dealWebView() {
this.runOnUiThread(new Runnable() {
public void run() {
if (Show == 1) {
hideWebView();
} else if (Show == 2) {
removeWebView();
} else {
if (layout != null && m_webView != null) {
showWebView();
// 如果已经加载过,直接显示出来,告诉游戏加载成功
AndroidApi.sayHello(Content.CMD_CTJ_OPEN_SMALL_WEB, "1");
}else{
openWebView() ;
}
}
}
});
}
// 打开WebView,给WebView一个线性布局
public void openWebView() {
// 创建并加载
m_layout = new LinearLayout(SimpleGame.this);
WebActivity.this.addContentView(m_layout , new LayoutParams( LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
m_webView = new WebView(WebActivity.this);
// 设置webView能够执行javascript脚本
m_webView.getSettings().setJavaScriptEnabled(true);
// 使页面获得焦点
// mWebView.requestFocus();
// 如果页面中链接,如果希望点击链接继续在当前browser中响应,监听网页加载情况
m_webView.setWebViewClient(new WebViewClient() {
public boolean shouldOverrideUrlLoading(WebView view,String url) {
if (url.indexOf("tel:") < 0) {
view.loadUrl(url);
}
return true;
}
@Override // 开始加载
public void onPageStarted(WebView view, String url,Bitmap favicon) {
super.onPageStarted(view, url, favicon);
}
@Override // 加载完成
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
if (!isError) {
isSuccess = true;
// 回调成功后的相关操作
showWebView();
AndroidApi.sayHello(Content.CMD_CTJ_OPEN_SMALL_WEB, "1");
} else {
removeWebView();
AndroidApi.sayHello(Content.CMD_CTJ_OPEN_SMALL_WEB, "0");
}
isError = false;
}
@Override // 加载出错
public void onReceivedError(WebView view,int errorCode, String description,String failingUrl) {
super.onReceivedError(view, errorCode, description,
failingUrl);
isError = true;
isSuccess = false;
AndroidApi.sayHello(Content.CMD_CTJ_OPEN_SMALL_WEB, "0");
removeWebView();
}
});
// 初始化时隐藏webView,防止未加载完成时,显示一个空白的webView;
// 但是这句在模拟器上正常显示,在真机上会导致网页显示不出来
// hideWebView();
m_layout.addView(m_webView);
LinearLayout.LayoutParams linearParams = (LinearLayout.LayoutParams) m_webView.getLayoutParams();
// 可选的webview位置,X,Y,W,H可任意填写,也可以做为函数参数传入,适配屏幕
DisplayMetrics metric = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metric);
int width = metric.widthPixels; // 屏幕宽度(像素)
int height = metric.heightPixels; // 屏幕高度(像素)
// 如果游戏按照横向纵向拉伸适配,则为:
double HScale = height / 640.0;
double WScale = width / 1136.0;
linearParams.leftMargin = (int) (X * WScale);
linearParams.topMargin = (int) (Y * HScale);
// linearParams.width = (int) (W * WScale);
// linearParams.height = (int) (H * HScale);
linearParams.rightMargin( width - (int)((X+W) * WScale));
linearParams.bottomMargin( height - (int)((Y+H) * HScale ));
// linearParams.setMargins((int)dis_w, (int)dis_h, (int)dis_w, (int)dis_h);
m_webView.setLayoutParams(linearParams);
// 可选的webview配置
m_webView.setBackground(AndroidApi.mainActivity.getResources().getDrawable(R.drawable.base_dialog_corner_bg));
m_webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
m_webView.getSettings().setAppCacheEnabled(false);
}
}
// 移除webView
public void removeWebView() {
if (m_layout != null && m_webView != null) {
m_webView.stopLoading();
// 清除历史缓存
// 清除网页访问留下的缓存,针对整个应用程序.
m_webView.clearCache(true);
// 清除当前m_webView访问的历史记录
m_webView.clearHistory();
// 清除自动完成填充的表单数据,并不会清除WebView存储到本地的数据
m_webView.clearFormData();
m_webView.destroyDrawingCache();
m_layout .removeView(m_webView);
m_webView.destroy();
m_webView = null;
m_layout = null;
}
}
// 隐藏webView
public void hideWebView() {
if (m_layout != null && m_webView != null) {
m_layout .setVisibility(View.GONE);
}
}
// 显示webView
public void showWebView() {
if (m_layout != null && m_webView != null) {
m_layout.setVisibility(View.VISIBLE);
}
}
java与cococs2dx交互的类中调用:
打开
WebActivity.getInstance().m_showType = 0;
WebActivity.getInstance().dealWebView();
隐藏
WebActivity.getInstance().m_showType =1;
WebActivity.getInstance().dealWebView();
移除
WebActivity.getInstance().m_showType = 2;
WebActivity.getInstance().dealWebView();