📄 argbcanvas.java
字号:
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;//每次修改像素的数目
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();
}
//初始化遮罩图片的数据
if(imgData == null){
imgData = new int[imgWidth*imgHeight];
for(int i = 0;i<imgData.length;i++){
imgData[i]=0x990000FF;
}
}
//每次修改两行像素数据
//length = 2*imgWidth;
//最多需要修改的次数
max = imgData.length/length;
index = new int[max];
for(int i = 0;i<max;i++){
index[i]=i;
}
//每隔100毫秒更新一下图片的数据,重新绘制屏幕
timer.scheduleAtFixedRate(new TimerTask() {
public void run() {
updateImageData();
repaint();
}
},0,10);
}
private void updateImageData(){
if(max<0){
timer.cancel();
}
//随机抽取需要更新的位置,且不重复
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);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -