在cocos2dx界面中嵌入android的webview。(c++篇,包含c++和java的交互)
2017-11-07 15:50
501 查看
原创链接: http://blog.csdn.net/a704020443/article/details/78468708
首先,新建一个cocos2dx项目。然后在
proj.android/src/org/cocos2dx/lib/Cocos2dxActivity.java
这个java文件里面开始书写代码。由于我只实现一个打开和关闭webview的功能,所以就直接写在这个java文件里面,不过为了方便,也可以重新建立一个java文件,来写关于这个webview的东西。
首先我们来引入一些包。
引入DisplayMetrics是为了获取屏幕的宽高。
好了,开始写openWebView。
首先我们来定义一个全局的webview
接下来便是closewebview了。
好了。代码已经上传。然后就是由于要在外部调用这两个函数,所以,要在UI线程里面跑。当然,你也可以就在java里面生成两个按钮,来控制打开关闭,这样就不用再UI线程里面跑,去掉下面的代码就可以了。
然后就是附上java的button的生成和调用用来测试。这样就很不错了。
找到onCreate()函数。把按钮写在这个函数里面。
如果你是在其他java文件中的话,首先你得引用Cocos2dxActivity.java这个文件,其次,把mFrameLayout的属性修改,保护类型改为public不然你无法访问到它。
好了,我们在java内部已经测试好了,代码没问题,就可以在外部c++中去调用它了。
当然,这两个函数得要是静态的,如果不是静态的,也可以调用,不过稍微有点麻烦而已。
首先生成两个外部的按钮,然后通过点击事件来调用java的函数接口。
首先判断在android下运行。然后通过jni的交互调用你java写的函数接口。如果你重新写的一个java文件,参数就需要变化,还有签名的类型。详细的请问度娘。
好了,写到这里,这个功能就暂时完毕了。
资源下载,包含了webView和安卓的遮罩效果(屏蔽向下的触摸事件)。
链接地址: http://download.csdn.net/download/a704020443/10140876
首先,新建一个cocos2dx项目。然后在
proj.android/src/org/cocos2dx/lib/Cocos2dxActivity.java
这个java文件里面开始书写代码。由于我只实现一个打开和关闭webview的功能,所以就直接写在这个java文件里面,不过为了方便,也可以重新建立一个java文件,来写关于这个webview的东西。
首先我们来引入一些包。
import android.util.DisplayMetrics; import android.view.View; import android.widget.Button; import android.webkit.WebSettings; import android.webkit.WebView; import android.webkit.WebViewClient;
引入DisplayMetrics是为了获取屏幕的宽高。
好了,开始写openWebView。
首先我们来定义一个全局的webview
public WebView m_webView = null; //-- public static void openWebView(){ sContext.runOnUiThread(new Runnable() { @Override public void run() { //初始化webView sContext.m_webView = new WebView(sContext); //设置webView能够执行javascript脚本 sContext.m_webView.getSettings().setJavaScriptEnabled(true); //设置可以支持缩放 sContext.m_webView.getSettings().setSupportZoom(true);//设置出现缩放工具 sContext.m_webView.getSettings().setBuiltInZoomControls(true); sContext.m_webView.getSettings().setAllowUniversalAccessFromFileURLs(true); //载入URL sContext.m_webView.lo 4000 adUrl("http://www.baidu.com"); //如果页面中链接,如果希望点击链接继续在当前browser中响应 sContext.m_webView.setWebViewClient(new WebViewClient(){ public boolean shouldOverrideUrlLoading(WebView view, String url) { if(url.indexOf("tel:")<0){ view.loadUrl(url); } return true; } }); DisplayMetrics dm = new DisplayMetrics(); //activity.getWindowManager().getDefaultDisplay().getMetrics(dm); //在没有Activity上下文时可使用如下方法,需要Context上下文 dm = sContext.getResources().getDisplayMetrics(); int screenwidth = dm.widthPixels;// 宽度 int screenheight = dm.heightPixels;// 高度 ViewGroup.LayoutParams lypt=new ViewGroup.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); //因为float和int不能转换,所以我这样写方便。别喷! lypt.width = screenwidth * 8 / 10; lypt.height = screenheight * 8 / 10; sContext.m_webView.setX(screenwidth * 1 / 10); sContext.m_webView.setY(screenheight * 1 / 10); sContext.m_webView.setLayoutParams(lypt); sContext.mFrameLayout.addView(sContext.m_webView); } }); }
接下来便是closewebview了。
public static void closeWebView(){ sContext.runOnUiThread(new Runnable() { @Override public void run() { if (sContext.m_webView != null) { sContext.mFrameLayout.removeView(sContext.m_webView); sContext.m_webView.destroy(); sContext.m_webView = null; } } }); }
好了。代码已经上传。然后就是由于要在外部调用这两个函数,所以,要在UI线程里面跑。当然,你也可以就在java里面生成两个按钮,来控制打开关闭,这样就不用再UI线程里面跑,去掉下面的代码就可以了。
sContext.runOnUiThread(new Runnable() { @Override public void run() { } });
然后就是附上java的button的生成和调用用来测试。这样就很不错了。
找到onCreate()函数。把按钮写在这个函数里面。
ViewGroup.LayoutParams lpBtn = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); Button btn = new Button(this); btn.setLayoutParams(lpBtn); btn.setText("open WebView"); btn.setOnClickListener(new View.OnClickListener () { @Override public void onClick(View view) { openWebView(); } }); Button btn_1 = new Button(this); btn_1.setX(800); //设置它的x坐标位置 btn_1.setLayoutParams(lpBtn); btn_1.setText("close WebView"); btn_1.setOnClickListener(new View.OnClickListener () { @Override public void onClick(View view) { closeWebView(); } }); //最后添加到layout中。 mFrameLayout.addView(btn); mFrameLayout.addView(btn_1);
如果你是在其他java文件中的话,首先你得引用Cocos2dxActivity.java这个文件,其次,把mFrameLayout的属性修改,保护类型改为public不然你无法访问到它。
import org.cocos2dx.lib.Cocos2dxActivity;
好了,我们在java内部已经测试好了,代码没问题,就可以在外部c++中去调用它了。
当然,这两个函数得要是静态的,如果不是静态的,也可以调用,不过稍微有点麻烦而已。
首先生成两个外部的按钮,然后通过点击事件来调用java的函数接口。
//引用 #if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) #include <jni.h> #include "platform/android/jni/JniHelper.h" #endif //---- btn_1->addClickEventListener([=](Ref*) { #if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) JniMethodInfo t; //参数:路径(包名)--你需要调用的函数接口--签名 bool ishave = JniHelper::getStaticMethodInfo(t, "org/cocos2dx/lib/Cocos2dxActivity", "openWebView", "()V"); if (ishave) { t.env->CallStaticVoidMethod(t.classID, t.methodID); } #endif });
首先判断在android下运行。然后通过jni的交互调用你java写的函数接口。如果你重新写的一个java文件,参数就需要变化,还有签名的类型。详细的请问度娘。
好了,写到这里,这个功能就暂时完毕了。
资源下载,包含了webView和安卓的遮罩效果(屏蔽向下的触摸事件)。
链接地址: http://download.csdn.net/download/a704020443/10140876
相关文章推荐
- 【COCOS2DX-ANDROID-游戏开发之二三】 界面中嵌入Android的WebView
- android WebView实现java与javascript的交互
- android 中 java 和 javascript 通过webview 交互
- Android WebView中的JavaScript和java代码的交互
- android webview js交互 第一节 (java和js交互)
- android webView js方法和java 方法交互
- Android 中 java 与 webview 的交互
- android webview js交互 第一节 (java和js交互)
- android webview js交互 第一节 (java和js交互)
- android webview用法小结2 java与javascript的交互
- android webview js交互 第一节 (java和js交互) .
- android webview用法小结2 java与javascript的交互
- android webview js交互 第一节 (java和js交互)
- cocos2dx 嵌入Android webview
- Android---Java与WebView的交互之Goolge翻译
- android webview js交互 第一节 (java和js交互)
- android webview js交互之自定义错误加载界面(重新刷新)
- android webview的 一些设置(js java交互)
- 在cocos2d-x界面中嵌入Android的WebView
- android webview用法小结2 java与javascript的交互