一个思路,cocos2dx调用原生安卓界面,可解决cocos坑人的listview
2016-12-16 11:36
176 查看
工程中总能遇到产品提出的各种各样的需求
比如我现在做的这个项目,一个cocos2dx-3.9的工程,做的却不是一个游戏,要完成很多业务。
比如要加许多的listview,而cocos的listview性能很差,想完成产品需求,就要自己重写一套组件,不是说不可以,但是费时费力,而且性能总没有原生控件流畅
这个时候就会想起如果能在场景中调用原生界面
我想了一下,大概有一个办法可以解决这个问题
cocos2dx的界面,有两种坐标尺
第一种,xx像素,但是屏幕的总像素是固定的。第二种,百分比容器。
两种方式殊途同归,显示效果 都是对于屏幕的百分比。而整个cocos的所有场景,在安卓中都是加载于一个activity中。
那么,就可以在cocos场景代码中,利用jni调取java方法,在activity中加入fragment,覆盖在界面上实现效果;
fragment的背景透明,去除点击,用下面这类百分比设置界面的宽高;
用下面这类方法设置百分比的布局效果,包括距离上下左右等
亲测可用,显示效果良好,基本上接近于无缝对接
比如我现在做的这个项目,一个cocos2dx-3.9的工程,做的却不是一个游戏,要完成很多业务。
比如要加许多的listview,而cocos的listview性能很差,想完成产品需求,就要自己重写一套组件,不是说不可以,但是费时费力,而且性能总没有原生控件流畅
这个时候就会想起如果能在场景中调用原生界面
我想了一下,大概有一个办法可以解决这个问题
cocos2dx的界面,有两种坐标尺
第一种,xx像素,但是屏幕的总像素是固定的。第二种,百分比容器。
两种方式殊途同归,显示效果 都是对于屏幕的百分比。而整个cocos的所有场景,在安卓中都是加载于一个activity中。
那么,就可以在cocos场景代码中,利用jni调取java方法,在activity中加入fragment,覆盖在界面上实现效果;
FragmentManager fragmentManager = activity.getFragmentManager(); FragmentTransaction fragmentTransaction = fragmentManager .beginTransaction(); WindowManager wm = activity.getWindowManager(); CocosFragment fragment1 = CocosFragment.newInstance(getDEVICE_ID(activity) , ""); fragmentTransaction.replace(android.R.id.content, fragment1); fragmentTransaction.addToBackStack(null); fragmentTransaction.commit();
fragment的背景透明,去除点击,用下面这类百分比设置界面的宽高;
DisplayMetrics displayMetrics = new DisplayMetrics(); windowsmanager.getDefaultDisplay().getMetrics(displayMetrics);
LinearLayout.LayoutParams line= (android.widget.LinearLayout.LayoutParams) rela.getLayoutParams(); line.width = (int)(displayMetrics.widthPixels*0.48); wi = line.width; //布局宽 line.height = (int)(wi/1261*1250); hi = line.height;//布局高
用下面这类方法设置百分比的布局效果,包括距离上下左右等
starlin = (LinearLayout) contentView.findViewById(R.id.starlin); RelativeLayout.LayoutParams starlinline= (android.widget.RelativeLayout.LayoutParams) starlin.getLayoutParams(); starlinline.height = (int)(wi/241.5*29); starlinline.setMargins((int)(wi/241.5*35),(int)(wi/241.5*75),(int)(wi/241.5*35),(int)(wi/241.5*0)); starlin.setLayoutParams(starlinline);
亲测可用,显示效果良好,基本上接近于无缝对接
相关文章推荐
- 笔记:做一个MFC串口界面遇到的一些问题和解决思路
- 解决 cocosjs与安卓原生集成 崩溃问题
- 【安卓】安卓App开发思路 一步一个脚印(一)欢迎界面
- 安卓使用EditText进入一个新页面时自动获取焦点弹出输入法界面解决办法
- 【安卓-自定义布局】安卓App开发思路 一步一个脚印(十三)关于ListView的优化总结
- 安卓入门:加深ListView学习,做一个简单的聊天界面
- 解决ListView在界面只显示一个item
- JavaScript调用App原生代码(iOS、Android)通用解决方案 实际场景 场景:现在有一个H5活动页面,上面有一个登陆按钮,要求点击登陆按钮以后,唤出App内部的登录界面,当登录成功
- Error: 10004 一个封锁操作被对 WSACancelBlockingCall的调用中断 的解决
- 解决一个问题的思路 之“解决已经写满con.close() 仍然出现"但是尚未从池中获取连接"的连接池耗尽问题”
- Mac OS X: MS Office for Mac问题解决的一个思路
- [转]android listview 连续调用 getview问题分析及解决。
- 一个解决循环内界面假死的方法
- WCF中远程服务器返回了一个错误: NotFound. 错误的解决思路
- ExpandableListView 功能界面布局探究之二(只展开一个group的实现)
- 约瑟夫环加强版用线段树解决m,,这类问题还可以拓展,只是一个思路,用线段树的思路要学习
- 某项目要调用现有的100多个DLL 三 先解决为一个类型做一个跨域的问题
- 使用easyui 做后台管理界面,在Tab中的链接点击后添加一个新TAB的解决方法
- Linux下oracle em isqlplus 界面汉字乱码最清晰解决思路
- Winfrom界面异步操作的一个解决方法