当前位置: 代码迷 >> Android >> android打造闪动的红心
  详细解决方案

android打造闪动的红心

热度:75   发布时间:2016-04-28 00:30:20.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是按照我手机的实际情况来的,所以我给的值是固定的。还有如果仅仅是按照那篇文章中的函数来的,画出来的心形是反的,所以里面有代码变化过了,这样出来的图就是正的。

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

  相关解决方案