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);
  }
}

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

(0)

相关推荐

  • 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;//粒子水平方向加速度 publi

  • Android自定义Banner轮播效果

    本文实例为大家分享了Android自定义Banner轮播效果展示的具体代码,供大家参考,具体内容如下 自定义View布局 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content"> <andro

  • Android自定义圆形进度条效果

    本文实例为大家分享了Android自定义圆形进度条效果的具体代码,供大家参考,具体内容如下 1 控件 RoundProgress package listview.tianhetbm.p2p.ui; import android.content.Context; import android.content.res.TypedArray; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import a

  • Android自定义View实现扫描效果

    本文实例为大家分享了Android自定义View实现扫描效果的具体代码,供大家参考,具体内容如下 演示效果如下: 实现内容: 1.控制动画是竖向或者横向 2.控制动画初始是从底部/左边开始,或者从上边/右边开始 3.控制动画的时常 4.可以自定义动画素材 具体实现: 自定义属性: <declare-styleable name="ScanView" tools:ignore="ResourceName"> <!--扫描的图片--> <a

  • Android自定义view实现太极效果实例代码

    Android自定义view实现太极效果实例代码 之前一直想要个加载的loading.却不知道用什么好,然后就想到了太极图标,最后效果是有了,不过感觉用来做loading简直丑到爆!!! 实现效果很简单,我们不要用什么贝塞尔曲线啥的,因为太极无非就是圆圆圆,只要画圆就ok了.来上代码: 因为有黑有白,所以定义2个画笔分别为黑和白. private void inital() { whitePaint = new Paint(); whitePaint.setAntiAlias(true); wh

  • Android自定义View实现打字机效果

    一.先来看看效果演示 二.实现原理: 这个其实不难实现,通过一个定时器不断调用TextView的setText就行了,在setText的时候播放打字的音效. 具体代码如下: import java.util.Timer; import java.util.TimerTask; import android.content.Context; import android.media.MediaPlayer; import android.text.TextUtils; import android

  • Android自定义UI手势密码改进版源码下载

    在之前文章的铺垫下,再为大家分享一篇:Android手势密码,附源码下载,不要错过. 源码下载:http://xiazai.jb51.net/201610/yuanma/androidLock(jb51.net).rar 先看第一张图片的布局文件 activity_main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://sc

  • Android自定义button点击效果的两种方式

    我们在界面上经常会用到button按钮,但通常button点击后看不到点击的效果,如果用户连续点击了两次,就会报NAR错误,这样交互性就比较差了.如果我们自定义了button点击效果,比如我们点击了button能让我们看到我们确实点击了button按钮,这样就会有效的避免重复点击了. 自定义点击效果有两种方式,一种是在xml中定义,另一种是在代码中定义. 首先看一下如何在xml中定义: 在drawable下新建selector.xml文件: <?xml version="1.0"

  • Android 自定义View实现抽屉效果

    Android 自定义View实现抽屉效果 说明 这个自定义View,没有处理好多点触摸问题 View跟着手指移动,没有采用传统的scrollBy方法,而是通过不停地重新布局子View的方式,来使得子View产生滚动效果menuView.layout(menuLeft, 0, menuLeft + menuWidth, menuHeight); 相应的,由于没有使用scrollBy方法,就没有产生getScrollX值,所以不能通过Scroller的startScroll方法来完成手指离开后的平

  • Android自定义指示器时间轴效果实例代码详解

    指示器时间轴在外卖.购物类的APP里会经常用到,效果大概就像下面这样,看了网上很多文章,大都是自己绘制,太麻烦,其实通过ListView就可以实现. 在Activity关联的布局文件activity_main.xml中放置一个ListView,代码如下.由于这个列表只是用于展示信息,并不需要用户去点击,所以将其clickable属性置为false:为了消除ListView点击产生的波纹效果,我们设置其listSelector属性的值为透明:我们不需要列表项之间的分割线,所以设置其divider属

随机推荐