// get ClassjmethodID constructor = (*env)->GetMethodID(env, cls, "", "()V");jobject testObject = (*env)->NewObject(env, testClass, constructor);methodID callFromCpp = (*env)->GetMethodID(env, testClass, "callFromCpp", "()V");
//get methodid(*env)->CallVoidMethod(env, testObject, callFromCpp);

那自己畫 UI 是否會更方便點?比如 JUCE 和 QT 就是自己畫的,我們來看看 QT 的效果:

看起來很不錯是吧?不過在 Android 5 下就悲劇了,很多效果都沒出來,比如按鈕沒有漣漪效果,甚至邊框都沒了,根本原因在于它是通過 Qt Quick Controls 的自定義樣式來模擬的,而不是使用系統(tǒng) UI 組件,因此它享受不到系統(tǒng)升級自動帶來的界面優(yōu)化,只能自己再實現(xiàn)一遍,工作量不小。

反而如果最開始用的是 Android 原生組件就什么都不需要做,而且還能用新的 AppCompat 庫來在 Android 5 以下實現(xiàn) Material Design 效果。

最后一種做法是使用 OpenGL 來繪制界面,因為 EGL OpenGL 本身就是跨平臺,所以基于它來實現(xiàn)會很方便,目前大多數(shù)跨平臺游戲底層都是這么做的。

既然可以基于 OpenGL 來開發(fā)跨平臺游戲,是否能用它來實現(xiàn)界面?當(dāng)然是可行的,而且 Android 4 的界面就是基于 OpenGL 的,不過它并不是只用 OpenGL 的 API,那樣是不現(xiàn)實的,因為 OpenGL API 最初設(shè)計并不是為了畫 2D 圖形的,所以連畫個圓形都沒有直接的方法,因此 Android 4 中是通過 Skia 將路徑轉(zhuǎn)換為位置數(shù)組或紋理,然后再交給 OpenGL 渲染的。

然而要完全實現(xiàn)一遍 Android 的 UI 架構(gòu)工作量不小,以下是其中部分相關(guān)代碼的代碼量:

其中光是文字渲染就非常復(fù)雜,如果你覺得簡單,那只能說明你沒看過這個世界有多大,或許你知道中文有編碼問題、英語有連字符(hyphen)折行,但你是否知道繁體中文有豎排版、阿拉伯文是從右到左的、日語有平假名注音(ルビ)、印度語有元音附標(biāo)文字(abugida ????)……?

而相比之下如果每個平臺單獨開發(fā)界面,看似工作量不小,但目前在各個平臺下都會有良好的官方支持,相關(guān)工具和文檔都很完善,所以其實成本沒那么高,而且可以給用戶和系統(tǒng)風(fēng)格保持一致的良好體驗,所以我認(rèn)為對于大多數(shù)應(yīng)用來說自己畫 UI 是很不劃算的。

不過也有特例,對于 UI 比較獨特的應(yīng)用來說,自己畫也是有好處的,除了更靈活的控制,它還能使得不同平臺下風(fēng)格統(tǒng)一,這在桌面應(yīng)用中很常見,比如 Windows 下你會發(fā)現(xiàn)幾乎每個必備軟件的 UI 都不太一樣,而且好多都有換膚功能,在這種情況下很適合自己畫 UI。

 更多關(guān)于云服務(wù)器域名注冊,虛擬主機的問題,請訪問三五互聯(lián)官網(wǎng):www.shinetop.cn

贊(0)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享網(wǎng)絡(luò)內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。郵箱:3140448839@qq.com。本站原創(chuàng)內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明出處:三五互聯(lián)知識庫 » 聊聊移動端跨平臺開發(fā)的各種技術(shù)

登錄

找回密碼

注冊