cocos creator 读取android相册并显示
cocos creator 读取android相册并显示前言由于功能需求,需要读取手机相册的图片并在游戏中加载出来,百度了很多,也遇到了许多坑,下面这个是比较简单的,需要的自取。cocos 调用原生getImgPath() {//这个是带参数的//"org/cocos2dx/javascript/AppActivity" 原生方法所在的类路径//"getImgData" 原生方法名
·
cocos creator 读取android相册并显示
前言
由于功能需求,需要读取手机相册的图片并在游戏中加载出来,百度了很多,也遇到了许多坑,下面这个是比较简单的,需要的自取。
cocos 调用原生
getImgPath() {
//这个是带参数的
//"org/cocos2dx/javascript/AppActivity" 原生方法所在的类路径
//"getImgData" 原生方法名
//"(Ljava/lang/String;)V" 方法签名
//'' 参数
//还不懂得就去看看 https://docs.cocos.com/creator/manual/zh/advanced-topics/java-reflection.html?h=jsb.reflection.callstaticmethod
jsb.reflection.callStaticMethod("org/cocos2dx/javascript/AppActivity", "getImgPath", "(Ljava/lang/String;)V", '');
//这个是不带参数的,根据需要自己选择
jsb.reflection.callStaticMethod("org/cocos2dx/javascript/AppActivity", "getImgPath", "()V")
}
android
android 读取相册需要授权,所以要现在 AndroidManifest.xml 里加上权限
<!-- 手机内置存储读取权限 -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<!-- 手机内置存储写入权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.CAMERA" />
然后在 AppActivity 内实例化刚写的方法
//有参数的记得接过来
public static void getImgPath () {
Intent intent_album = new Intent(Intent.ACTION_PICK,android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
app.startActivityForResult(intent_album, 2);
}
接下来找到这个方法
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
}
在里面写
if (data != null) {
// 得到图片的全路径写法,可以copy
Uri uri = data.getData();
String[] filePathColumns = { MediaStore.Images.Media.DATA };
Cursor c = getContentResolver().query(uri, filePathColumns, null, null, null);
c.moveToFirst();
int columnIndex = c.getColumnIndex(filePathColumns[0]);
String imagePath = c.getString(columnIndex);
//app = this 自己记得设置变量赋值
app.runOnGLThread(new Runnable() {
@Override
public void run(){
Cocos2dxJavascriptJavaBridge.evalString("cc.find('Canvas/Test').getComponent('Test').showImg(" + imagePath + ");");
}
});
}
在cocos内显示图片
有了路径显示就很简单了,我在这有个坑爬了两天,是引入upng-js 库和 jpeg-js 库一直报错,我看的方法是说用 jsb.fileUtils.getDataFromFile(path) 这个方法去读图片数据,但这个方法返回的数据不是像素信息,而是格式化后的,需要解码,而解码就需要引入upng-js 库和 jpeg-js 库,但我一引入就报错,不引入就没法解码,也查找了报错的解决办法,有的说是node.js版本问题,有的说是方法问题,但都没用,最后才发现,这个好像是个路径,可以直接用的!!!
showImg(path){
cc.loader.load({url: path, type: 'jpg'}, function(err,img){
this.sprite.spriteFrame = new cc.SpriteFrame(img);
});
}
就这一行代码坑了我两天,我真是有 橘麻麦皮 不知当讲不当讲!
更多推荐
已为社区贡献1条内容
所有评论(0)