SerfaceView 自定义View 运动小球 区块链 星空图

先上图,本文用自定义View简单实现一个这样的效果,动态图看着有点卡卡的,帧率问题,运行起来是很流畅的 ----- 文末添加用SerfaceView的实现方式
在这里插入图片描述
思路
N个小球随机方向,随机速度,在视图中移动;任意两个小球靠近到一定距离就连线,距离越近,线越粗
分以下步骤实现
1.创建小球类,这里我用点来表示 取类名Po
2.创建一个定时器,16ms 刷新一次小球的位置,并重绘视图

这里定义的Po类有X,Y坐标,X,Y方向移动速度,以及绘制的半径,(半径是预留出来改变球的大小的,这个字段暂时没使用,球大小固定,就写了个固定值)

package com.zcy.mycanvas.view;

public class Po implements Runnable {

    private boolean isRemove;

    float x;//x坐标(有效范围0-1,0-1代表在承载视图左到右 , 用这个值乘以视图宽度就得到X方向坐标 , 下面同理)
    float y;//Y坐标
    float r;//半径
    float vx;//X方向速度
    float vy;//Y方向速度

    public Po(float x, float y, float r, float vx, float vy) {
        this.x = x;
        this.y = y;
        this.r = r;
        this.vx = vx;
        this.vy = vy;
    }

    /**
     * 用来刷新位置
     */
    @Override
    public void run() {
        if ((x < - 0.01f && vx < 0f) || ( x > 1.01f && vx > 0f)) vx = - vx;//超出显示边缘百分之1回弹
        if ((y < - 0.01f && vy < 0f) || ( y > 1.01f && vy > 0f)) vy = - vy;//超出显示边缘百分之1回弹
        x += vx;
        y += vy;
    }

    /**
     * 计算本点和目标点的距离,
     * @param o
     * @return
     */
    public float lenght(Po o){
        float lx = x - o.x;
        float ly = y - o.y;
        return (float) Math.sqrt(lx*lx + ly*ly);
    }

    public boolean isRemove() {
        return isRemove;
    }

    p
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值