zoukankan      html  css  js  c++  java
  • 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是依照我手机的实际情况来的。所以我给的值是固定的。还有假设不过依照那篇文章中的函数来的。画出来的心形是反的。所以里面有代码变化过了,这样出来的图就是正的。

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

  • 相关阅读:
    python机器学习:推荐系统实现(以矩阵分解来协同过滤)
    使用SAS,Stata,HLM,R,SPSS和Mplus的分层线性模型HLM
    R语言中小样本违反异方差性的线性回归
    R语言基于协方差的结构方程拟合的卡方检验
    R语言异方差回归模型建模:用误差方差解释异方差
    R语言中的生存分析Survival analysis晚期肺癌患者4例
    python列表的方法(改变原列表)
    python修改列表
    python列表的 + 、* 、in 、 not in 、 len() 、 max() 、 min()
    python切片(获取一个子列表(数组))
  • 原文地址:https://www.cnblogs.com/claireyuancy/p/6894745.html
Copyright © 2011-2022 走看看