遊戲中淡入淡出效果、UI 元件顯示/隱藏動畫、場景切換轉場,皆需影像漸變透明度。
ARGB 像素最高 8 位為 Alpha 通道 (0x00 完全透明 ~ 0xFF 完全不透明)。修改 Alpha 值即可控制透明度:
// 保留原 RGB,僅更新 Alpha
argb[i] = (alpha << 24) | (argb[i] & 0x00FFFFFF);
import java.io.IOException;
import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
public class FadeCanvas extends Canvas implements Runnable {
Image image;
int[] argb;
int alpha = 0; // 0~255
public FadeCanvas() {
try {
image = Image.createImage("/test.png");
} catch (IOException e) {
e.printStackTrace();
}
argb = new int[image.getWidth() * image.getHeight()];
image.getRGB(argb, 0, image.getWidth(), 0, 0,
image.getWidth(), image.getHeight());
// 初始完全透明
for (int i = 0; i < argb.length; i++) {
argb[i] = (alpha << 24) | (argb[i] & 0x00FFFFFF);
}
new Thread(this).start();
}
protected void paint(Graphics g) {
g.setColor(0xFFFFFF);
g.fillRect(0, 0, getWidth(), getHeight());
g.drawImage(image, 0, 0, Graphics.TOP | Graphics.LEFT); // 底圖參考
g.drawRGB(argb, 0, image.getWidth(), 0, 100,
image.getWidth(), image.getHeight(), true); // 疊加漸變層
g.drawString(String.valueOf(alpha), 10, 90, Graphics.TOP | Graphics.LEFT);
}
public void run() {
while (alpha < 256) {
// 更新所有像素 Alpha
for (int i = 0; i < argb.length; i++) {
argb[i] = (alpha << 24) | (argb[i] & 0x00FFFFFF);
}
repaint(); // 觸發重繪
alpha++;
try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); }
}
}
}

圖片從完全透明 (Alpha=0) 漸變至完全不透明 (Alpha=255),背景白色底圖清晰可見。
Runnable 配合 repaint() 實現非阻塞動畫drawRGB(),形成淡入效果Thread.sleep(100) 約 10 FPS,可依裝置效能調整