⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 argbcanvas.java

📁 j2me简单实例,j2me教程加源码,希望大家喜欢
💻 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 + -