📄 testcanvas.java
字号:
import javax.microedition.lcdui.*;
import java.io.*;
public class TestCanvas extends Canvas implements Runnable {
static final int WIDTH = 240, HEIGHT = 289;
static final int KEY_UP = -1;
static final int KEY_DOWN = -2;
static final int KEY_LEFT = -3;
static final int KEY_RIGHT = -4;
static final int KEY_MIDDLE = -5;
static final int SOFTKEY_LEFT = -6;
static final int SOFTKEY_RIGHT = -7;
TestJ2ME midlet;
Display display;
long time0, time1, timePassed;
int RUN_RATE = 50;
Image ken,transparentKen;
PalettedImage blueKen;
int[] originalArgb;//原argb数组
int[] argb;//存放图片的argb数组
int curAlpha;//当前alpha值
boolean flag;
TestCanvas(TestJ2ME m) {
midlet = m;
display = m.display;
display.setCurrent(this);
init();
new Thread(this).start();
}
private void init() {
try {
ken=Image.createImage("/ken.png");
}
catch (IOException e) {
e.printStackTrace();
}
originalArgb=new int[ken.getWidth()*ken.getHeight()];
argb=new int[ken.getWidth()*ken.getHeight()];
ken.getRGB(originalArgb,0,ken.getWidth(),0,0,ken.getWidth(),ken.getHeight());
try {
blueKen=PalettedImage.createPalettedImage("/ken.png");
}
catch (IOException e) {
e.printStackTrace();
}
transparentKen=Image.createRGBImage(originalArgb,ken.getWidth(),ken.getHeight(),true);
// printByteArray(originalArgb);
}
private void changeAlphaChannel(){//改变图片的alpha通道值
System.out.println("alpha="+Integer.toHexString(curAlpha));
for(int i=0;i<argb.length;i++){
if((originalArgb[i]&0xff000000)!=0){//原本不是完全透明
argb[i]=originalArgb[i]&(curAlpha+0xffffff);
}
}
// printByteArray(argb);
transparentKen=Image.createRGBImage(argb,ken.getWidth(),ken.getHeight(),true);
}
protected void paint(Graphics g) {
g.setColor(0xffffff);
g.fillRect(0,0,WIDTH,HEIGHT);
g.drawImage(blueKen.getImage(), WIDTH/2, HEIGHT/2, Graphics.HCENTER|Graphics.VCENTER);
g.drawImage(transparentKen, WIDTH/2, HEIGHT/2, Graphics.LEFT|Graphics.TOP);
}
public void run() {
time0 = System.currentTimeMillis();
while (true) {
time1 = System.currentTimeMillis();
timePassed = time1 - time0;
time0 = time1;
curAlpha+=0x4000000;//每次循环变化alpha通道值
changeAlphaChannel();
repaint();
serviceRepaints();
time1 = System.currentTimeMillis();
if (time1 - time0 < RUN_RATE) {
try {
Thread.sleep(RUN_RATE - (time1 - time0));
}
catch (InterruptedException e) {
}
}
}
}
public void keyPressed(int keyCode) {
if(keyCode==KEY_NUM5){
flag=!flag;
System.out.println(keyCode);
if(flag){
blueKen.replaceColor(0xf44000,0x666688);
blueKen.replaceColor(0xFF4400,0x555577);
blueKen.replaceColor(0xD40000,0x446666);
blueKen.replaceColor(0xb40000,0x333355);
blueKen.replaceColor(0x940000,0x222244);
blueKen.replaceColor(0x700000,0x111122);
}
else{
blueKen.replaceColor(0x666688,0xf44000);
blueKen.replaceColor(0x555577,0xFF4400);
blueKen.replaceColor(0x446666,0xD40000);
blueKen.replaceColor(0x333355,0xb40000);
blueKen.replaceColor(0x222244,0x940000);
blueKen.replaceColor(0x111122,0x700000);
}
}
}
private static void printByteArray(int[] ia){
System.out.println("---------------");
for(int i=0;i<ia.length;i++){
System.out.print(Integer.toHexString(ia[i]));
System.out.print(",");
}
System.out.println();
System.out.println("===============");
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -