Android自定义UI之粒子效果

 更新时间:2020年10月22日 09:37:15   作者:qq_1113502097  
这篇文章主要为大家详细介绍了Android自定义UI之粒子效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了Android自定义UI之粒子效果的具体代码,供大家参考,具体内容如下

1.爆炸实体类

public class Ball {

  public int color;//颜色
  public float x;//圆心x坐标
  public float y;//圆心y坐标
  public float r;//粒子半径

  public float vX;//粒子水平方向速度
  public float vY;//粒子y方向速度
  public float aX;//粒子水平方向加速度
  public float ay;//粒子y方向加速度
}

2.自定义SplitView类

import android.animation.ValueAnimator;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.view.animation.LinearInterpolator;

import androidx.annotation.Nullable;

import java.util.ArrayList;
import java.util.List;

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) {
    super(context);
  }

  public SplitView(Context context, @Nullable AttributeSet attrs) {
    super(context, attrs);
  }

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

  private void init() {
    mPaint=new Paint();
    mBitmap= BitmapFactory.decodeResource(getResources(),R.drawable.ic_launcher_background);
    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();//重新调用onMeasure,ondraw方法。
      }
    });
  }

  private int rangInt(int x,int y){
    int max=Math.max(x,y);
    int min=Math.min(x,y);
    return (int)(min+Math.ceil(Math.random()*(max-min)));
  }

  private void upDateBall() {
    for (Ball ball:mBalls){
      ball.x=ball.x+ball.vX;
      ball.y=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);
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Android 添加TextView删除线(代码简单)

    Android 添加TextView删除线(代码简单)

    最近接了个项目,其中有项目需求是这样的,有这么个需求,就是一个产品下有两个价格,一个是市场价,一个是销售价,这时要把市场价添加个删除线;怎么实现呢?下面小编给大家分享一段简单的代码实现Android 添加TextView删除线
    2016-02-02
  • android使用Textview实现伸缩效果

    android使用Textview实现伸缩效果

    这篇文章主要为大家详细介绍了android使用Textview实现伸缩效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-11-11
  • Android Studio无法改变Button背景颜色解决办法

    Android Studio无法改变Button背景颜色解决办法

    今天我来和大家探讨一个在Android开发中常见但可能让初学者感到困惑的问题,如何在Android Studio中改变Button的背景颜色,这个问题看似简单,但实际操作中可能会遇到一些意想不到的挑战,接下来,我将从多个角度为大家提供解决方案,需要的朋友可以参考下
    2024-05-05
  • Android webview 内存泄露的解决方法

    Android webview 内存泄露的解决方法

    这篇文章主要介绍了Android webview 内存泄露的解决方法的相关资料,需要的朋友可以参考下
    2017-07-07
  • Android使用WebView.loadUri()打开网页的方法

    Android使用WebView.loadUri()打开网页的方法

    这篇文章主要介绍了Android使用WebView.loadUri()打开网页的方法,结合实例形式分析了Android中WebView控件的loadUri()打开网页的使用技巧,需要的朋友可以参考下
    2016-01-01
  • android广角相机畸变校正算法和实现示例

    android广角相机畸变校正算法和实现示例

    今天小编就为大家分享一篇android广角相机畸变校正算法和实现示例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-08-08
  • 详解Android的网络数据存储

    详解Android的网络数据存储

    LeanCloud是一种简单高效的数据和文件存储服务,本文主要介绍了利用LeanCloud来进行网络数据的存储的实现方法。具有很好的参考价值,需要的朋友一起来看下吧
    2016-12-12
  • 解决Android解析图片的OOM问题的方法!!!

    解决Android解析图片的OOM问题的方法!!!

    我们在编写Android程序的时候经常要用到许多图片,不同图片总是会有不同的形状、不同的大小,程序占用了过高的内存就容易出现OOM(OutOfMemory)异常。本篇文章主要讲诉了解决Android解析图片的OOM问题,有兴趣的可以了解一下。
    2016-11-11
  • Android 详解Studio引用Library与导入jar

    Android 详解Studio引用Library与导入jar

    这篇文章主要介绍了Android Studio引用Library与导入jar的相关资料,需要的朋友可以参考下
    2017-01-01
  • Android Fragment 和 FragmentManager 的代码分析

    Android Fragment 和 FragmentManager 的代码分析

    这篇文章主要介绍了Android Fragment 和 FragmentManager 的代码分析,非常不错,具有参考借鉴价值,需要的的朋友参考下吧
    2017-01-01

最新评论