我是Android新手,我想知道如何从资源中创建字体
我在我的Android应用程序的assets文件夹中有我的.ttf文件。
我正在使用原生代码来创建字体:
class Test
{
public:
Test(){};
Test(const char* path);
bool getHasFont(){ return hasFont;}
~Test(){}
private:
SkPaint paint;
SkTypeface* typeface;
bool hasFont;
};
Test::Test(const char* path)
{
LOGI(path);
typeface = SkTypeface::CreateFromFile(path);
if(typeface != NULL)
hasFont = true;
else
hasFont = false;
}
JNIEXPORT jboolean JNICALL Java_com_example_Test_NativeSkia_getHelloFromNative(JNIEnv *env,
jclass clazz, jstring path) {
const char *nativeString = env->GetStringUTFChars(path, 0);
Test* tes = new Test(nativeString);
return tes->getHasFont();
}
}在Android应用程序中,我调用:
boolean isWorking = NativeSkia.getTestFromNative("../assets/fonts/Agora/Agora-Reg.ttf"); 其返回值为false;
如果我在SD卡上的设备中创建文件夹,并将我所有的字体放在那里:
boolean isWorking = NativeSkia.getTestFromNative("/mnt/sdcard/fonts/Agora/Agora-Reg.ttf");它工作得很好,但我需要将我的字体放在assets文件夹中。
发布于 2013-07-11 19:26:40
文件路径不正确在这种情况下不能使用相对路径。我需要使用Android NDK asset_manager.h和asset_manager_jni.h来获取要传递给Skia的文件描述符。
JNIEXPORT jboolean JNICALL Java_com_example_KernMe_NativeSkia_getHelloFromNative(JNIEnv *env,
jclass clazz, jobject assetManager, jstring path) {
AAssetManager *mgr = AAssetManager_fromJava(env, assetManager);
if (mgr == NULL)
return false;
const char *nativeString = env->GetStringUTFChars(path, 0);
AAsset* asset = AAssetManager_open(mgr, nativeString, AASSET_MODE_BUFFER);
if (NULL == asset)
return false;
SkStream* stream = new AssetStream(asset, true);
SkTypeface* face = SkTypeface::CreateFromStream(stream);
if(face == NULL)
return false;
env->ReleaseStringUTFChars(path, nativeString);
AAsset_close(asset);
return true;
}https://stackoverflow.com/questions/17531433
复制相似问题