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

📄 ripple.java

📁 Java案例开发集锦,里面提供了很好的学习例子
💻 JAVA
字号:
import java.applet.Applet;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.MediaTracker;

public class Ripple extends Applet implements Runnable {
	Thread thread = null;

	private Graphics g, refraction;

	private Image image, refimage;

	private int currentImg;

	private int imageW = 0, imageH = 0;

	private int ovalW = 0, ovalH = 0;

	private boolean finishLoad = false;

	private final int frames = 12;

	private String name = "";

	public void init() {
		//初始化applet
		String param;
		//从html文件中获取图片文件名
		param = getParameter("image");
		if (param != null)
			name = param;
	}

	public void paint(Graphics g) {
		//如果已经载入图片,则返回
		if (!finishLoad)
			return;
		//输出倒影图片
		if (refimage != null) {
			g.drawImage(refimage, (-currentImg * imageW), imageH, this);
			g.drawImage(refimage, ((frames - currentImg) * imageW), imageH,
					this);
		}
		//输出正向图片
		g.drawImage(image, 0, -1, this);

	}

	public void start() {
		//启动applet,创建并启动线程
		if (thread == null) {
			thread = new Thread(this);
			thread.start();
		}
	}

	public void run() {
		//启动线程
		//加载图片
		currentImg = 0;
		g = getGraphics();
		MediaTracker imageTracker = new MediaTracker(this);
		String strImage;
		image = getImage(getDocumentBase(), name);
		imageTracker.addImage(image, 0);
		try {
			imageTracker.waitForAll();
			finishLoad = !imageTracker.isErrorAny();
		} catch (InterruptedException e) {
		}
		//图片宽度、图片高度
		imageW = image.getWidth(this);
		imageH = image.getHeight(this);
		//生成倒影
		createRipple();
		//重新输出applet
		repaint();
		while (true) {
			try {
				if (!finishLoad)
					return;

				if (refimage != null) {
					g.drawImage(refimage, (-currentImg * imageW), imageH, this);
					g.drawImage(refimage, ((frames - currentImg) * imageW),
							imageH, this);
				}
				g.drawImage(image, 0, -1, this);

				if (++currentImg == frames)
					currentImg = 0;
				Thread.sleep(50);
			} catch (InterruptedException e) {
				stop();
			}
		}
	}

	public void createRipple() {
		//产生水波特效

		Image back = createImage(imageW, imageH + 1);
		Graphics offg = back.getGraphics();
		int phase = 0;
		int x, y;
		double p1;
		offg.drawImage(image, 0, 1, this);
		for (int i = 0; i < (imageH >> 1); i++) {
			offg.copyArea(0, i, imageW, 1, 0, imageH - i);
			offg.copyArea(0, imageH - 1 - i, imageW, 1, 0, -imageH + 1
					+ (i << 1));
			offg.copyArea(0, imageH, imageW, 1, 0, -1 - i);
		}
		refimage = createImage((frames + 1) * imageW, imageH);
		refraction = refimage.getGraphics();
		refraction.drawImage(back, frames * imageW, 0, this);

		for (phase = 0; phase < frames; phase++) {

			p1 = 2 * Math.PI * (double) phase / (double) frames;
			x = (frames - phase) * imageW;
			for (int i = 0; i < imageH; i++) {
				y = (int) ((imageH / 14)
						* ((double) i + 28.0)
						* Math.sin((double) ((imageH / 14) * (imageH - i))
								/ (double) (i + 1) + p1) / (double) imageH);
				if (i < -y)
					refraction.copyArea(frames * imageW, i, imageW, 1, -x, 0);
				else
					refraction.copyArea(frames * imageW, i + y, imageW, 1, -x,
							-y);
			}
		}
		offg.drawImage(image, 0, 1, this);
		image = back;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -