Android Studio NDK-assets遍歷文檔

謎語之摸蒞又冇烈
謎語之摸蒞又冇烈

assets讀文檔, 如果有大量文檔,要逐壹畀文檔路徑蒞讀, 更佳係『assets 裏邊.

將『文檔』擺係『檔案夾』. 然後遍歷『文檔』.

訪問『assets』檔案夾

AAssetDir * assetDir;

開啟文檔夾, dir』係『assets 裏邊

assetDir = AAssetManager_openDir(assetManager,dir);

失敗返回NULL

if(assetDir == NULL)

        return false;

遍歷文檔,

while((filename = AAssetDir_getNextFileName(assetDir)) != NULL) {

組合『assets』『文檔』路徑.

sprintf(path, “%s/%s”, dir, filename);

閂檔案夾

AAssetDir_close(assetDir);

 

萬事得3珍珠白車漆修補

萬事得3珍珠白車漆修補
萬事得3珍珠白車漆修補

『萬事得3』褪車畀矮石碼, 刮花車左前門.

係填灰前需盡量修复明顯凹陷,減小填灰.

平整架餐『橋式修复』.

  1. 用800#砂紙磨刮痕,濕水磨
  2. 用酒精清洁
  3. 24V熱熔槍, 插入熱熔胶,預熱伍分鐘.
  4. 選擇合适吸盤, 凹陷深吸盤大, 凹位小吸盤細.
  5. 對吸盤涂膠. 均勻飽滿.
  6. 吸盤對正凹陷中㸃,撳住幾秒.
  7. 套金属橋身,撐兩側支腳,趁㬵未凍,擰螺帽拔复車身.
  8. 用酒精除殘膠.
  9. 此過程可能要重复多次.

 

明顯凹陷填灰平整表層.淺刮痕跳過.

  1. 用800#砂紙磨刮痕,濕水磨
  2. 『灰』同『固化劑』比例100:2
  3. 批刮填補凹陷.
  4. 等3日固化
  5. 濕水用800#砂紙磨,反复磨至光滑平整

 

清洁

  1. 用酒精酒精清洁脫脂
  2. 用報紙遮擋非車身區域

 

淺刮痕直接用,郡仕噴灰罐B524.

  1. 噴前搖60秒
  2. 秘決係离遠噴, 約摸10~15cm. 噴得太埋會留淚.
  3. 隔兩分鐘再噴
  4. 等1個鐘

 

噴漆

  1. 噴珍珠白底漆
  2. 噴珍珠白面漆
  3. 噴亮光金油

Android Studio NDK-OpenGL ES 觸屏坐標轉游㱆坐標

Android Studio NDK-OpenGL ES 觸屏坐標轉游㱆坐標
Android Studio NDK-OpenGL ES 觸屏坐標轉游㱆坐標

觸屏坐標』『x,y』坐標轉『正交投影』坐標, 『視錐體解像』寬高, 比例需手機解像寬高比壹致.

計屏幕寬高比

float aspect_ratio = (float)cam->real_width / (float)cam->real_height;

『視錐體解像』寬高,此時定義『高』800pix

float frustum_width    = 800 *aspect_ratio;
float frustum_height   = 800 ;

 

『正交投影』代碼

重置視區尺寸, 值係手機解像寬高

::glViewport(0,0,real_width,real_height);

設定投影矩陣

::glMatrixMode(GL_PROJECTION);

載入單位矩陣

::glLoadIdentity();

正交投影, 游戲坐標原點(0,0,0)為於屏幕中心

glOrthof(frustum_width / 2, frustum_width / 2, -frustum_height / 2, frustum_height / 2, pos.y – 10, far_clip_z);

設定模型視圖矩陣

::glMatrixMode(GL_MODELVIEW);

載入單位矩陣

::glLoadIdentity();

 

手指触摸手機屏幕onTouch() 所得坐標需轉游戲世界坐標,正交投影OpenGL游㱆+Z軸指向屏幕深處.

float touch3Dx = (touch2Dx / real_width) * frustum_width  ;
float touch3Dz = (touch2Dy /real_height) * frustum_height  ;

計3D相機位置

touch3Dx = touch3Dx + camPosX;
touch3Dz = touch3Dz + camPosX;

游戲坐標原點(0,0,0)為於屏幕中心

touch3Dx = touch3Dx – (frustum_width / 2.0f);
touch3Dz = touch3Dz – (frustum_height / 2.0f);

 

Android Studio NDK-OpenGL ES 漢字位圖字庫

Android Studio NDK-OpenGL ES 漢字位圖字庫
Android Studio NDK-OpenGL ES 漢字位圖字庫

『漢字字庫』同 『ASCII字庫』原理同, 字庫『竪排』, 漢字『32*32』pixel, 『竪』32漢字.

由上至下,由右至左排列.可填1024字符,每色8Bit. 即『索引色』『調色板』.

准備庫位圖

  1. 白紙黑字,
  2. 白色係透明色. 黑色係變換色.

Photoshop轉為『索引色』

  1. 『影像』->『模色』->『索引色』
  2. 『色盤』揀『正確』.
  3. 『顏色』量3
  4. 『强制』揀『黑白』
  5. 『透明』勾選
  6. 存為『.pcx』或『.bmp』

止時圖檔『調色板』共有三色『黑』『白』『透明』.

IMAGE-SIZE 1024*1024
FONT-SIZE 30pt
FONT 衡山毛筆フォント
FONT-PIXEL 32pixel*32pixel
影像-模色 索引色
色盤 正確
顏色 3
强制 黑白
透明 勾選

『調色板』結构同DirextX唔同, 將flags存alpha『透明值』0~255,0係『透明』,255係『實心』

typedef struct PALETTE_TYP {

BYTE red;

BYTE green;

BYTE blue;

BYTE flags;//alpha

} PALETTE,COLOR,* PALETTE_PTR,*COLOR_PTR;

設置『調色板』顏色

#define INIT_PALETTE(palette,r,g,b,a) {(palette).red=(r); (palette).green=(g); (palette).blue=(b); (palette).flags=(a);}

黑字『調色板』設置

index red green blue Alpha
253 0xff 0xff 0xff 0x00
255 0x00 0x00 0x00 0xFF*0.5f

白字『調色板』設置

index red green blue Alpha
253 0x00 0x00 0x00 0x00
255 0xff 0xff 0xff 0xFF*0.5f

半透明,激活混合

glEnable(GL_BLEND);

設混合模式, 渲染時Alpha值混合.

glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

激活透明测试

glEnable(GL_ALPHA_TEST);

Alpha=0時, 過濾背影色

glAlphaFunc(GL_GREATER, 0);

 

等腰三角形

等腰三角形
等腰三角形

『等腰三角形』相等兩邊呌『腰』, 另壹邊呌『底』. 兩『腰』夾角叫『頂角』. 『腰』『底』夾角叫『底角』. 兩『底角』角度相等.

『等腰三角形』 簡述
『腰』 『等腰三角形』相等兩邊呌『腰』
『底』 另壹條邊
『頂角』 兩『腰』夾角
『底角』 『腰』『底』夾角, 兩『底角』角度相等.

計『等腰三角形』『頂角』 『底角』

cos(底角)=(底長/2)/ 腰長
底角 = acosf((底長/2)/ 腰長)

『三角形』內角之和180度.

底角+底角+頂角= 180

頂角 = 180 – 底角* 2

 

衡山毛筆フォント草書

衡山毛筆フォント草書
衡山毛筆フォント草書

書法家『青柳衡山』揮毫. 登録漢字最多草書字庫. 約萬餘字,公開免費,商業領域冇制限使用.有『TrueType』『OpenType』版. 將『KouzanBrushFontSousyo.ttf』『KouzanSoushoOTF.otf』字庫複製係『C:\Windows\Fonts』

衡山毛筆フォント草書 (揮毫/青柳衡山)
https://opentype.jp/kouzansousho.htm

 

衡山毛筆フォント

衡山毛筆フォント
衡山毛筆フォント

『經倫羅盤』需『漢字庫』, 書法家『青柳衡山』揮亳書寫. 登録萬三漢字.公開免費,商業領域冇制限使用.有『TrueType』『OpenType』版. 將『KouzanMouhituFont.ttf』『KouzanMouhituFontOTF.otf』字庫复制係『C:\Windows\Fonts』

衡山毛筆フォント
https://opentype.jp/kouzanmouhitufont.htm
C:\Windows\Fonts
毛筆體

 

 

爾靈山

爾靈山
爾靈山

儒略歴1904年皇軍為進攻龜縮『金州』『亞瑟港』 太平陽艦隊. 組建『第叁軍團』司令官『乃木希典』.

『亞瑟港』『要塞』冚辦爛用鋼筋水泥建造,『堡壘群』互聯互通, 炮台前方佈『地雷陣』『鐵絲網』, 係周邊佈『速射炮』『重機鎗』.『第叁軍團』死傷亡慘重, 幾近喪失戰力.改為進攻『貳零叁』高地, 從而通過掉炮燒滅『太平陽艦隊』.

『貳零叁』音近『爾靈山』,『乃木希典』鎮慰英魂賦詩『爾靈山』.

爾靈山瞼豈難攀
男子功名期克艱
鐵血覆山山形改
萬人齊仰爾靈山

『乃木希典』長子『乃木勝典』次子『乃木保典』皆戰死.

十ハ甫

殺人十ハ甫 填屍陸脈渠
殺人十ハ甫 填屍陸脈渠

『清國』順治七年番王『尚可喜』,率清軍攻陷『明國』最後都城『廣州』,明皇『朱聿𨮁』自縊.

『尚可喜』諗起舊頂頭『毛文龍』,畀東莞仔『袁崇煥』用尚方寶劍斬殺.下今從『西門』『殺人十ハ鋪』. 壹鋪拾里『十ハ鋪』指『百捌里』.

清軍於『天后廟』集結, 係『第壹津』沿路殺,『刀鋒過後血淋淋』殺到『十ハ甫』木牌下先抽刀入銷. 屍首填係『陸脈渠』.後世呌『殺人十ハ甫 填屍陸脈渠』.

 

Google nexus5 32GB

Google nexus5 32GB
Google nexus5 32GB
Google nexus5 32GB
Google nexus5 32GB
Google nexus5 32GB
Google nexus5 32GB
Google nexus5 32GB
Google nexus5 32GB

買Google nexus5『壹為神功,貳為弟子』,『壹蒞開發,貳還心愿』.機仔細細窄邊框.當年靚絕Android, 本蒞愛『Android 4』『黑蓋』寄蒞『Android 5』『白蓋』. 韓國LG制造港版,換新電包郵百肆蚊有找.部機吾升級係用吾到, 永遠話連吾到.

  1. 先升android 5.1, 再升5.11 吾停甘升, 最後升至android 6.01
  2. 去下載『google play 商店』, 擺係download安裝.
  3. 再升google play 服務.
  4. 孻屘升gmail郵箱, 登入google帳號.
Google nexus5 簡介
4.94英寸
解像 1920*1080
4000mAh
相機 1310萬
CPU 驍龍800
RAM 2GB
DISK 32GB
MODEL LG-D821港版

 

Android Studio NDK-触摸onTouch()

Android Studio NDK-触摸onTouch()
Android Studio NDK-触摸onTouch()

初台Android手機己采用『單點』触摸, 直至Android2.0(SDK version 5) 先支持『多點』触摸.

  1. Android觸摸監聽『OnTouchListener』 監聽 『触屏』事件.
static class TounchListener implements OnTouchListener{
  1. 通過『onTouch()』獲取『触屏』信息.
@Override

public boolean onTouch(View v, MotionEvent event) {

  1. 0(ÉCLAIR)(API 5) 先支持多點触摸
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ECLAIR)
  1. 處理『多點』触摸
MultiTouch(v, event); else
  1. 處理『單點』触摸
SingleTouch(v, event);
  1. 返回false, 繼續處理觸摸事件.
return false;}

 

  1. 生成觸摸監聽
private static TounchListener Tounch_Listener  = new TounchListener() ;
  1. 為OpenGL View注冊触摸监听,
view.setOnTouchListener(Tounch_Listener);
  1. 通過OnTouch()(View v, MotionEvent event) 獲取『触屏』坐標 . 『触屏』原點(0,0) 係左上角, 單位象素
MotionEvent.getX() X軸指右
MotionEvent.getY() Y軸指下
  1. 獲取『触屏』事件類型 . MotionEvent.getAction()
MotionEvent.getAction()  
MotionEvent.ACTION_DOWN 手指撳屏
MotionEvent.ACTION_POINTER_DOWN 手指撳屏
MotionEvent.ACTION_UP 手指鬆离
MotionEvent.ACTION_POINTER_UP 手指鬆离
MotionEvent.ACTION_CANCEL 手勢鬆
MotionEvent.ACTION_MOVE 移動手指
  1. 『触屏』類型簡化為『撳』『鬆』『拖』三類
public static int ACTION_UP =     1;
public static int ACTION_DOWN = 2;
public static int ACTION_DRAGGED = 3;

 

 

 

 

處理『單點』触摸

static void SingleTouch(View v, MotionEvent event){
  1. 提取『触屏』事件類型
int action = event.getAction() & MotionEvent.ACTION_MASK;
  1. 處理『撳』類型
if(action == MotionEvent.ACTION_DOWN ||

action == MotionEvent.ACTION_POINTER_DOWN)

        Lib.setTouch(ACTION_DOWN,event.getX(),event.getY());else
  1. 處理『撳』類型
if(action == MotionEvent.ACTION_UP ||

action == MotionEvent.ACTION_POINTER_UP ||

action == MotionEvent.ACTION_CANCEL)

        Lib.setTouch(ACTION_UP,event.getX(),event.getY());else
  1. 處理『拖』類型
if(action == MotionEvent.ACTION_MOVE)
Lib.setTouch(ACTION_DRAGGED,event.getX(),event.getY());}

 

 

處理『多點』触摸

  1. 處理多手指触摸, 提取触摸事件索引
int Pointer_Index = (event.getAction() & MotionEvent.ACTION_POINTER_ID_MASK)>>MotionEvent.ACTION_POINTER_ID_SHIFT;
  1. 通過触摸事件索引,『触屏』原點(0,0) 係左上角, 單位象素
MotionEvent.getX(index) X軸指右
MotionEvent.getY(index) Y軸指下
  1. 提取『触屏』事件類型
int action = event.getAction() & MotionEvent.ACTION_MASK;
  1. 處理多手指触摸, 提取触摸事件索引
int Pointer_Index = (event.getAction() & MotionEvent.ACTION_POINTER_ID_MASK)>>MotionEvent.ACTION_POINTER_ID_SHIFT;
  1. 提取觸摸事件量
int Pointer_Count = event.getPointerCount();
  1. 遍歷冚觸摸事件
for(int i=0; i< Pointer_Count; ++i)        {
  1. 跳過冇關觸摸事件
if (action != MotionEvent.ACTION_MOVE && i != Pointer_Index)

continue;

  1. 處理『撳』類型
if(action == MotionEvent.ACTION_DOWN ||

action == MotionEvent.ACTION_POINTER_DOWN)

        Lib.setTouch(ACTION_DOWN,event.getX(i),event.getY(i));else
  1. 處理『撳』類型
if(action == MotionEvent.ACTION_UP ||

action == MotionEvent.ACTION_POINTER_UP ||

action == MotionEvent.ACTION_CANCEL)

        Lib.setTouch(ACTION_UP,event.getX(i),event.getY(i));else
  1. 處理『拖』類型
if(action == MotionEvent.ACTION_MOVE)
Lib.setTouch(ACTION_DRAGGED,event.getX(i),event.getY(i));}

 

 

係C++緩存『触屏』信息Lib.setTouch();

typedef struct TOUCH_STR{  
int action; 触屏類型
int x,y; 触屏坐標
}TOUCH,*TOUCH_PTR;  

『触屏座標』轉『熒屏座標』

void TouchToScreen(CAMERA2D_PTR cam,VECTOR2D_PTR touch){
touch->x = (touch->x / (float)cam->real_width) * cam->frustum_width * cam->zoom;
touch->y = (1-touch->y /(float)cam->real_height) * cam->frustum_height * cam->zoom; }

 

手機影印程式『Canon Print Service』

Canon Print Service
Canon Print Service
Canon Print Service
Canon Print Service

Mopria Paint』係Android手機平板發影印指令. 如果『Mopria Paint』報『ERROR CODE 853』, 可嘗試『Canon Print Service』,Canon專用Android影印機程式. 同『Mopria Paint』係『外掛程式』後台臺運行, 向Canon發影印指令.

  1. 係其它程式『文檔』『網頁』『影像』
  2. 撳『更多』『分享』
  3. 撳『Canon』.
  4. 自動跳入『影印設定』
  5. 揀『MF745C/746C(192.168.1.6)』
份數 1
紙張尺碼 ISO A4
色彩 黑色/彩色
方向 縱向/橫向
雙面 無/長邊/短邊
  1. 撳『影印』

Canon佳能MF746Cx 硒鼓 CRG055

墨粉余量狀態
墨粉余量狀態

Canon佳能MF746Cx 硒鼓 CRG055 Canon佳能MF746Cx 硒鼓 CRG055

Canon佳能MF746Cx 硒鼓 CRG055
Canon佳能MF746Cx 硒鼓 CRG055

Canon佳能MF746Cx碳粉耗盡, 原厰 CGR-055硒鼓貴, 買副鼓有『廢粉㝫』『入粉㝫』.撳左側制翻蓋,抽出硒鼓匣, 排列按『Y』『M』『C』『K』

硒鼓 顏色
Y
M 洋紅
C
K
  1. 左右搖硒鼓,令碳粉勻循分佈.
  2. 抽封條, 揭護罩
  3. 裝入對應槽位.

係電腦睇『墨粉余量狀態』皆100%,提示非原厰厰硒. 影印OK.

 

2025-11-27購入, 至2025-12-30首次换『碳粉』.

  1. 硒鼓有兩個開眼位, 位於『碳粉倉』仝『廢粉倉』. 近滚棍係 『廢粉倉』.
  2. 分別開眼倒出『廢粉』, 此過要重多次. 最好係大膠袋中倒出. 以免『廢粉』外泄.
  3. 『新粉』要到入『碳粉倉』. 倒入量冇朋确要求. 太多易漏粉.
  4. 左右搖硒鼓,令碳粉勻循分佈.

Carmate車門防撞條細邊款 CZ494C

Carmate車門防撞條細邊款 CZ494C
Carmate車門防撞條細邊款 CZ494C
Carmate車門防撞條細邊款 CZ494C
Carmate車門防撞條細邊款 CZ494C
Carmate車門防撞條細邊款 CZ494C
Carmate車門防撞條細邊款 CZ494C

『萬事得3』新車落地『  錫』, 泊車位窄, 黐得埋推門易撞花『隔籬車』. 係車門邊裝膠條. Carmate CZ494C防撞條,細邊款睇起蒞唔顯眼. 係車門內側貼近門邊黐雙面膠, 否則唔得配合. 壹盒3m『萬事得3』要兩盒.

Android Studio 全屏CUTOUT MODE

Android Studio 全屏CUTOUT MODE
Android Studio 全屏CUTOUT MODE

全屏令人沉浸游戲免受干擾. 收埋頂『狀態』『標題』底『導航』.

  1. 舊時全屏係『Activity:onCreate()』飛『標題』
 requestWindowFeature(Window.FEATURE_NO_TITLE);
  1. 飛『狀態』
Window window =  getWindow();
window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
  1. 上述代碼需係『填充布局』前執行
setContentView(R.layout.activity_main);
  1. 亦可用『全屏样式』係『xml』
<style  name=”Theme.Fullscreen”  parent=”android:Theme.NoTitleBar.Fullscreen” />
  1. 係<application>或<activity>加『全屏样式』
<application android:theme=”@style/Theme.Fullscreen” >
  1. 因Android『導航』由硬件鍵變成『觸摸屏』軟件鍵, 要飛底『導航』飛頂『狀態』. 即『沉㓎模式』要係4 Kit Kat(API 19).
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT)
  1. 係『Activity:onCreate()』執行『setSystemUiVisibility()』設置沉浸模式
View decorView = window.getDecorView();
decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY |

View.SYSTEM_UI_FLAG_LAYOUT_STABLE |

View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION |

View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN |

View.SYSTEM_UI_FLAG_HIDE_NAVIGATION |

View.SYSTEM_UI_FLAG_FULLSCREEN);

  1. 設置沉浸模式
setSystemUiVisibility() 簡述
View.SYSTEM_UI_FLAG_HIDE_NAVIGATION 飛底『導航』
View.SYSTEM_UI_FLAG_FULLSCREEN 飛頂『狀態』
View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY 自動恢復『沉㓎模式』
View.SYSTEM_UI_FLAG_IMMERSIVE 『沉㓎模式』
  1. 隨『全面屏』追求係手機頭『鑿窿』裝『相機』. 導置『全面屏』變『兔唇屏 』.即『CUTOUT MODE』要係Androd 9.0 Pie(API 28) 受支持.
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
  1. 同係設布局『LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES』
WindowManager.LayoutParams param = window.getAttributes();
param.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES;
window.setAttributes(param);}

 

layoutInDisplayCutoutMode 簡述
LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT 全屏唔延伸至『兔唇 』, 非全屏延伸至『兔唇 』
LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER WINDOW唔延伸至『兔唇 』
LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES 窻口延伸至『兔唇 』

 

Android 螢幕喚醒

Android 螢幕喚醒Android 螢幕耗電, 擺低手機螢幕變暗,幷鎖定. 好似你唔惏野會放蚊咁.用『喚醒鎖』WakLock. 保持清醒『螢幕喚醒』.

  1. 先係『xml』添加權限
<uses-permission android:name=”android.permission.WAKE_LOCK” />
  1. 係『onCreate()』獲得電源管理『PowerManager』
PowerManager powerManager;
powerManager = (PowerManager)context.getSystemService(Context.POWER_SERVICE);
  1. 生成『WakLock』喚醒鎖. 『FULL_WAKE_LOCK』螢幕保持著燈.CPU全速運行.
PowerManager.WakeLock wakeLock;
wakeLock = powerManager.newWakeLock(PowerManager.FULL_WAKE_LOCK, “WAKE LOCK”);
  1. 係『onResume()』啟用『WakLock』喚醒鎖, 手機保持喚醒態,
wakeLock.acquire();
  1. 係『onPause()』釋放喚醒鎖
wakeLock.release();

 

 

    getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);