• 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是依照我手机的实际情况来的,所以我给的值是固定的。

    还有假设不过依照那篇文章中的函数来的,画出来的心形是反的,所以里面有代码变化过了。这样出来的图就是正的。

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

  • 相关阅读:
    C# Guid should contain 32 digits with 4 dashes (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx).
    C# Collection was modified;enumeration operation may not execute
    C# 写文件
    AJAX 入门教程
    ABP 软删除ISoftDelete
    C# 随机列表
    C# ConfigurationManager 类的使用
    mui 关闭当前窗口
    C# 委托
    VSTO:使用C#开发Excel、Word【13】
  • 原文地址:https://www.cnblogs.com/liguangsunls/p/6894746.html
Copyright © 2020-2023  润新知