cocos2d-x在iOS/Android双平台上嵌入WebView-创新互联
注:文章首次发布于个人博客,现将技术文章转移至此。 http://blog.go3k.org/cocos2dx-add-webview/
创新互联自2013年起,先为甘孜州等服务建站,甘孜州等地企业,进行企业商务咨询服务。为甘孜州企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。游戏中的帮助和游戏公告,可以通过嵌入显示WebView的方案来实现,通过编辑HTML来修改、更新公告的样式和内容都很方便。
iOS平台嵌入
iOS平台上的嵌入很顺利,网上有现成的教程加代码,关键是做好OC与C++代码混编的封装。
参考如下链接中的实现方式: cocos2d-x 使用UIWebView加载网页
Android平台嵌入
1. 通过JNI从cocos2d-x的C++代码调用java代码。
这是Android实现WebView嵌入的前提条件,务必仔细的学习一遍,否则无法向下继续。 详情参见: JNI使用教程
这是我总结的一篇JNI使用的教程,基本涵盖所有JNI使用相关的要点。
2. java代码的实现
标准Android显示WebView的实现,参考代码如下:
public void displayWebView() { this.runOnUiThread(new Runnable() { public void run() { //actInstance为成员变量,是当前的Activity。 m_webView是WebView类型的成员变量 LinearLayout layout = new LinearLayout(actInstance); actInstance.addContentView(layout, new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT)); m_webView = new WebView(actInstance); layout.addView(m_webView); LinearLayout.LayoutParams linearParams = (LinearLayout.LayoutParams) m_webView.getLayoutParams(); //可选的webview位置,x,y,width,height可任意填写,也可以做为函数参数传入。 linearParams.leftMargin = x; linearParams.topMargin = y; linearParams.width = width; linearParams.height = height; m_webView.setLayoutParams(linearParams); //可选的webview配置 m_webView.setBackgroundColor(0); m_webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE); m_webView.getSettings().setAppCacheEnabled(false); } }); }
这里需要注意的问题是:
JNI调用过来的代码并不是在主线程程序流中,UI显示需要放到主线程中进行。这个问题卡了我半天的时间,最后问了锋哥才明白Android上需要这么搞。
源码分享
抽时间Github上建了项目,地址如下:
https://github.com/go3k/CCXWebview
3. 对webView的配置
在自定义的webView中跳转链接,而不是打开系统浏览器。
这需要对webView设置WebViewClient,并实现shouldOverrideUrlLoading方法,如下:
改变WebView视图的大小与位置
设置webView的LayoutParamaters,setLayoutParams。
参考链接: How to add an UIWebView to Cocos2d-x ?
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
标题名称:cocos2d-x在iOS/Android双平台上嵌入WebView-创新互联
文章源于:http://scyanting.com/article/cdjgde.html