android制作闪动的红心

先上一张效果图吧:


说说这个东西的来源吧。今天突然想到笛卡尔心形图,想去看看能不能画个心出来,可是看到一篇不错的文章,那篇文章罗列了非常多关于心形的函数方程,这可把我高兴坏了,于是我选取了一个比較好看的“桃心”做了今天的效果。

以下贴代码:

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.graphics.Path;
import android.util.AttributeSet;
import android.view.View;

public class LoveView extends View {

	private Paint paint;
	private float rate = 5; // 半径变化率
	private AnimThread at; // 改变rate的线程
	private Path path; // 路径
	
	public LoveView(Context context) {
		super(context);
		init();
	}

	public LoveView(Context context, AttributeSet attrs) {
		super(context, attrs);
		init();
	}
	
	private void init() {
		at = new AnimThread();
		// 初始化画笔
		paint = new Paint();
		paint.setAntiAlias(true);
		paint.setColor(Color.RED);
		paint.setStyle(Style.FILL);
		paint.setStrokeWidth(2);
		// 创建一个路径
		path = new Path();
		at.start();
	}

	@Override
	protected void onDraw(Canvas canvas) {
		super.onDraw(canvas);
		// 重置画板
		path.reset();
		// 得到屏幕的长宽的一半
		int px = getMeasuredWidth() / 2;
		int py = getMeasuredHeight() / 2;
		// 路径的起始点
		path.moveTo(px, py - 5 * rate);
		// 依据心形函数绘图
		for (double i = 0; i <= 2 * Math.PI; i += 0.001) {
			float x = (float) (16 * Math.sin(i) * Math.sin(i) * Math.sin(i));
			float y = (float) (13 * Math.cos(i) - 5 * Math.cos(2 * i) - 2 * Math.cos(3 * i) - Math.cos(4 * i));
			x *= rate;
			y *= rate;
			x = px - x;
			y = py - y;
			path.lineTo(x, y);
		}
		canvas.drawPath(path, paint);
	}
	
	private class AnimThread extends Thread {
		public void run() {
			while (true) {
				rate += 0.05;
				if (rate > 20) { // 我的手机大于20后就非常大了,为了不超过屏幕
					rate = 5;
				}
				try {
					Thread.sleep(10);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
				// 刷新画布
				postInvalidate();
			}
		}
	};
	
}

凝视非常清楚了,有些參数rate是依照我手机的实际情况来的。所以我给的值是固定的。还有假设不过依照那篇文章中的函数来的。画出来的心形是反的。所以里面有代码变化过了,这样出来的图就是正的。

事实上有时候认为这东西没什么技术含量(本来不好意思发的),哈哈,只是认为好玩,还是忍不住发出来了。

原文地址:https://www.cnblogs.com/claireyuancy/p/6894745.html