码迷,mamicode.com
首页 > 移动开发 > 详细

android制作闪动的红心

时间:2015-06-09 21:55:03      阅读:209      评论:0      收藏:0      [点我收藏+]

标签: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是按照我手机的实际情况来的,所以我给的值是固定的。还有如果仅仅是按照那篇文章中的函数来的,画出来的心形是反的,所以里面有代码变化过了,这样出来的图就是正的。

其实有时候觉得这东西没什么技术含量(本来不好意思发的),哈哈,不过觉得好玩,还是忍不住发出来了。

android制作闪动的红心

标签:android跳动的心

原文地址:http://blog.csdn.net/zhoudailiang/article/details/46431685

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!