/**
* 繪製半透明黑色遮罩層 (ARGB: 0x90000000, 透明度 ~56%)
* @param g Graphics 繪圖上下文
*/
public void drawTransparentBackground(Graphics g) {
int width = getWidth(); // 或 Platform.WIDTH
int height = getHeight(); // 或 Platform.HEIGHT
int[] argb = new int[width];
// 填充半透明黑色 (Alpha=0x90, RGB=0x000000)
for (int i = 0; i < width; i++) {
argb[i] = 0x90000000;
}
// 一行一行繪製,覆蓋整個屏幕
for (int y = 0; y < height; y++) {
g.drawRGB(argb, 0, width, 0, y, width, 1, true);
}
}
drawRGB(int[] rgb, int offset, int scanlength, int x, int y, int width, int height, boolean processAlpha) 直接操作像素數據。processAlpha=true 啟用 Alpha 通道混合,實現半透明效果。| 平台/機型 | 測試結果 | 備註 |
|---|---|---|
| Sony Ericsson K810 | ✅ 正常顯示半透明 | |
| Sony Ericsson K610 | ❌ 無效果(不透明/無顯示) | 同品牌不同機型差異大 |
| Nokia S60 系列 (3650/6600/7610...) | ✅ 正常 | |
| Nokia S40 系列 | ❌ 不支持 | 底層實現未處理 Alpha |
| Motorola 系列 | ❌ 無效果 |
Image.createImage),繪製圖片而非像素操作,部分不支持 drawRGB Alpha 的機型支持 PNG Alpha。0xCCCCCC)或直接彈出不帶遮罩的對話框。drawRGB 實現半透明背景代碼簡潔、性能較好,但嚴重依賴設備底層實現。S60 支持較好,S40、Motorola、部分 SE 機型不支持。實項目中必須做真機兼容性測試並提供降級策略。