您的位置:首页 > 移动开发 > Cocos引擎

一个思路,cocos2dx调用原生安卓界面,可解决cocos坑人的listview

2016-12-16 11:36 176 查看
工程中总能遇到产品提出的各种各样的需求

比如我现在做的这个项目,一个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);


亲测可用,显示效果良好,基本上接近于无缝对接
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐