?? argbcanvas.java
字號(hào):
package com.j2medev.chapter3;
import java.io.IOException;
import java.util.*;
import javax.microedition.lcdui.*;
public class ARGBCanvas extends Canvas{
private Image img = null;
private int imgWidth = -1;
private int imgHeight = -1;
private int[] imgData = null;
private int[] index = null;
private int length = 50;//每次修改像素的數(shù)目
private int max = 0;
private Random random = new Random();
private Timer timer = new Timer();
public ARGBCanvas() {
try{
img = Image.createImage("/city.png");
}catch(IOException ex){
ex.printStackTrace();
}
if(img != null){
imgWidth = img.getWidth();
imgHeight = img.getHeight();
}
//初始化遮罩圖片的數(shù)據(jù)
if(imgData == null){
imgData = new int[imgWidth*imgHeight];
for(int i = 0;i<imgData.length;i++){
imgData[i]=0x990000FF;
}
}
//每次修改兩行像素?cái)?shù)據(jù)
//length = 2*imgWidth;
//最多需要修改的次數(shù)
max = imgData.length/length;
index = new int[max];
for(int i = 0;i<max;i++){
index[i]=i;
}
//每隔100毫秒更新一下圖片的數(shù)據(jù),重新繪制屏幕
timer.scheduleAtFixedRate(new TimerTask() {
public void run() {
updateImageData();
repaint();
}
},0,10);
}
private void updateImageData(){
if(max<0){
timer.cancel();
}
//隨機(jī)抽取需要更新的位置,且不重復(fù)
int temp = (random.nextInt()>>>1)%max;
for(int i = index[temp]*length,j=0;j<length&&i<imgData.length;i++,j++){
imgData[i]=0x000000;
}
index[temp]=index[max-1];
max--;
}
public void paint(Graphics g){
int color = g.getColor();
g.setColor(0xFFFFFF);
g.fillRect(0,0,getWidth(),getHeight());
g.setColor(color);
g.drawImage(img,getWidth()/2,getHeight()/2,Graphics.HCENTER|Graphics.VCENTER);
int x = getWidth()/2-imgWidth/2;
int y = getHeight()/2-imgHeight/2;
g.drawRGB(imgData,0,imgWidth,x,y,imgWidth,imgHeight,true);
}
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -