美文网首页
cavas实例 粒子效果

cavas实例 粒子效果

作者: GoodWen | 来源:发表于2019-10-08 08:59 被阅读0次

粒子封装对象

public class Ball {
    public int color; //图片像素点颜色值
    public float x; //粒子圆心坐标x
    public float y; //粒子圆心坐标y
    public float r; //粒子半径

    public float vX;//粒子运动水平方向速度
    public float vY;//粒子运动垂直方向速度
    public float aX;//粒子运动水平方向加速度
    public float aY;//粒子运动垂直方向加速度

}

自定义View

public class SplitView extends View {

    private Paint mPaint;
    private Bitmap mBitmap;
    private float d = 3;//粒子直径
    private ValueAnimator mAnimator;
    private List<Ball> mBalls = new ArrayList<>();

    public SplitView(Context context) {
        this(context, null);
    }

    public SplitView(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public SplitView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init();
    }

    private void init(){
        mPaint = new Paint();
        mBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.pic);
        for (int i = 0; i < mBitmap.getWidth(); i++) {
            for (int j = 0; j < mBitmap.getHeight(); j++) {
                Ball ball = new Ball();
                ball.color = mBitmap.getPixel(i,j);
                ball.x = i * d + d/ 2;
                ball.y = j * d + d/ 2;
                ball.r = d / 2;

                //速度(-20,20)
                ball.vX = (float) (Math.pow(-1, Math.ceil(Math.random() * 1000)) * 20 * Math.random());
                ball.vY = rangInt(-15, 35);
                //加速度
                ball.aX = 0;
                ball.aY = 0.98f;

                mBalls.add(ball);
            }
        }

        mAnimator = ValueAnimator.ofFloat(0,1);
        mAnimator.setRepeatCount(-1);
        mAnimator.setDuration(2000);
        mAnimator.setInterpolator(new LinearInterpolator());
        mAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator animation) {
                updateBall();
                invalidate();
            }
        });

    }

    private int rangInt(int i, int j) {
        int max = Math.max(i, j);
        int min = Math.min(i, j) - 1;
        //在0到(max - min)范围内变化,取大于x的最小整数 再随机
        return (int) (min + Math.ceil(Math.random() * (max - min)));
    }


    private void updateBall() {
        //更新粒子的位置
        for (Ball ball : mBalls) {
            ball.x += ball.vX;
            ball.y += ball.vY;

            ball.vX += ball.aX;
            ball.vY += ball.aY;
        }
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        canvas.translate(500,500);
        for (Ball ball : mBalls) {
            mPaint.setColor(ball.color);
            canvas.drawCircle(ball.x, ball.y, ball.r, mPaint);
        }

    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        if (event.getAction() == MotionEvent.ACTION_DOWN){
            //执行动画
            mAnimator.start();
        }
        return super.onTouchEvent(event);
    }
}

主Activity

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
//        setContentView(R.layout.activity_main);
//        setContentView(new SaveRestoreView(this));
        setContentView(new SplitView(this));
    }
}

相关文章

  • cavas实例 粒子效果

    粒子封装对象 自定义View 主Activity

  • 三,粒子实例简介

    本节主要内容 粒子实例创建的情形 如何创建粒子实例 粒子实例的更新 实例创建的情形 在粒子系统中,一般来说有如下需...

  • 粒子效果

    特效组件(靠材质体现): component-effect 拖尾效果: 镜头光晕(Lens Flars):涉及到后...

  • 粒子效果

    //获取元素 var canvas = document.getElementById('canvas'); va...

  • 粒子效果

    粒子效果(复制层) 开始 重绘 自定义一个DrawView绑定控制器的viewawakeFromNib中添加手势p...

  • 粒子效果

    粒子效果 说到粒子效果,iPhone用户应该经常见到的,比如下雨天时天气app中的雨滴效果。还有和小伙聊微信时不小...

  • iOS --粒子效果简单实现

    前言 :整个粒子动画效果,学习学习... 看看演示效果 Pragma mark — NO.1 创建最简单的粒子效果...

  • 音视频开发之旅(15) OpenGL ES粒子系统 - 喷泉

    目录 粒子和粒子系统 实践:喷泉效果 遇到的问题 资料 收获 通过该篇的实践实现如下效果 一、什么是粒子和粒子系统...

  • vue粒子效果

    粒子效果是一个很好玩很有趣的东西,前几天有人问我vue怎么使用粒子效果,其实vue使用一些简单粒子效果很容易,下面...

  • vue粒子效果

    粒子效果是一个很好玩很有趣的东西,前几天有人问我vue怎么使用粒子效果,其实vue使用一些简单粒子效果很容易,下面...

网友评论

      本文标题:cavas实例 粒子效果

      本文链接:https://www.haomeiwen.com/subject/vpvjuctx.html