【Java开源代码栏目提醒】:网学会员鉴于大家对Java开源代码十分关注,论文会员在此为大家搜集整理了“Change_Transparent_Canvas.java”一文,供大家参考学习
package ch06;
import java.util.*;
import javax.microedition.lcdui.*;
public class Change_Transparent_Canvas
extends Canvas {
//声明一个存储前景图像数组的数组对象
private int[] pixelArray;
//声明一个代表图像数组大小的int型属性变量
private int pixelArraySize;
//声明一个代表图像宽度的int型属性变量
private int displayWidth;
//声明一个代表图像高度的int型属性变量
private int displayHeight;
//声明一个代表图像数组中每次被线程改变值的象素索引
private int randomPixel;
//声明一个代表背景图片的Image对象
private Image image = null;
//声明一个随机数
private Random random;
//声明一个控制绘制的Timer对象
private Timer tm;
//声明一个实现绘制的TimerTask对象
private TimerTask tt;
//声明一个代表初始化完成状态的标志
private boolean initComplete = false;
//声明一个代表主MIDlet类对象
Change_Transparent_MIDlet midlet;
/*
2.构造器
*/
public Change_Transparent_Canvas(Change_Transparent_MIDlet midlet) {
this.midlet = midlet;
//获取屏幕宽度和高度
displayWidth = getWidth();
displayHeight = getHeight();
pixelArraySize = displayWidth * displayHeight;
//获取一个随机对象
random = new java.util.Random();
//调用createBox()方法生成前景色图像数据
createBox();
//装载背景图片
try {
image = Image.createImage("/icons/background/boy02.png");
}
catch (Exception e) {
System.out.println(e.getMessage());
}
//执行绘制线程
tm = new Timer();
tt = new DrawTask();
tm.scheduleAtFixedRate(tt, 0, 1);
}
/*
3.生成前景色图像数据
*/
private void createBox() {
int red, green, blue, alpha;
long tmp;
if (pixelArray == null) {
pixelArray = new int[pixelArraySize];
red = (random.nextInt() >>> 1) % 256;
green = (random.nextInt() >>> 1) % 256;
blue = (random.nextInt() >>> 1) % 256;
alpha = 0xff; //不透明
//合成ARGB格式
tmp = (alpha << 24) | (red << 16) | (green << 8) | blue;
for (int i = 0; i < pixelArraySize; i++) {
pixelArray[i] = (int) tmp;
}
}
}
/*
4.更新前景色
*/
private void updateDisplay() {
//获取被改变象素的起始象素索引
randomPixel = (random.nextInt() >>> 1) % (pixelArraySize);
//改变象素透明度
for (int i = randomPixel, j = 0; j < 50 && i < (pixelArraySize); j++, i++) {
pixelArray[i] = 0x00000000;
}
}
/*
5.绘制图像
*/
public void paint(Graphics g) {
if (initComplete == false) {
//用白色填充背景色
g.setColor(255, 255, 255);
g.fillRect(0, 0, displayWidth, displayHeight);
initComplete = true;
}
//绘制背景图片
if (image != null) {
g.drawImage(image, 0, 0, Graphics.LEFT | Graphics.TOP);
}
//绘制前景图像
g.drawRGB(pixelArray, 0, displayWidth, 0, 0, displayWidth, displayHeight, true);
}
/*
6.响应按键事件
*/
protected void keyPressed(int keyCode) {
tt.cancel();
for (int i = 0; i < (pixelArraySize); i++) {
pixelArray[i] = 0x00000000;
}
repaint();
}
/*
7.声明一个TimerTask类
*/
private class DrawTask
extends TimerTask {
public final void run() {
updateDisplay();
repaint();
}
}
}
上一篇:
Change_Button.java
下一篇:
打造自主高品质轻卡 江铃凯运再出强劲版