最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android自定義UI之粒子效果

 更新時(shí)間:2020年10月22日 09:37:15   作者:qq_1113502097  
這篇文章主要為大家詳細(xì)介紹了Android自定義UI之粒子效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了Android自定義UI之粒子效果的具體代碼,供大家參考,具體內(nèi)容如下

1.爆炸實(shí)體類

public class Ball {

  public int color;//顏色
  public float x;//圓心x坐標(biāo)
  public float y;//圓心y坐標(biāo)
  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);//重復(fù)次數(shù)無限
    mAnimator.setDuration(2000);//重復(fù)時(shí)間
    mAnimator.setInterpolator(new LinearInterpolator());
    mAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
      @Override
      public void onAnimationUpdate(ValueAnimator animation) {
        upDateBall();
        invalidate();//重新調(diào)用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)
   {

     //觸發(fā)動畫
     mAnimator.start();
   }
    return super.onTouchEvent(event);
  }
}

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Android NDK生成及連接靜態(tài)庫與動態(tài)庫的方法

    Android NDK生成及連接靜態(tài)庫與動態(tài)庫的方法

    這篇文章主要介紹了Android NDK生成及連接靜態(tài)庫與動態(tài)庫的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-08-08
  • Android String類型轉(zhuǎn)換為float、double和int的工具類方法

    Android String類型轉(zhuǎn)換為float、double和int的工具類方法

    今天小編就為大家分享一篇Android String類型轉(zhuǎn)換為float、double和int的工具類方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • Android中修改TabLayout底部導(dǎo)航條Indicator長短的方法

    Android中修改TabLayout底部導(dǎo)航條Indicator長短的方法

    Tablayout在我們?nèi)粘i_發(fā)中經(jīng)常會遇到,下面這篇文章主要給大家介紹了在Android中修改TabLayout底部導(dǎo)航條Indicator長短的方法,文中給出了詳細(xì)的示例代碼供大家參考學(xué)習(xí),需要的朋友們下面來一起看看吧。
    2017-06-06
  • Android 多層嵌套后的 Fragment 懶加載實(shí)現(xiàn)示例

    Android 多層嵌套后的 Fragment 懶加載實(shí)現(xiàn)示例

    這篇文章主要介紹了Android 多層嵌套后的 Fragment 懶加載實(shí)現(xiàn)示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-04-04
  • Android全面屏適配方法詳解

    Android全面屏適配方法詳解

    Apple一直在引領(lǐng)設(shè)計(jì)的潮流,自從 iPhone X 發(fā)布之后,各種異形屏、劉海屏也都出來,下面這篇文章主要給大家分享介紹了關(guān)于Android全面屏與異形(劉海)屏的適配教程,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-11-11
  • Android實(shí)現(xiàn)本地Service方法控制音樂播放

    Android實(shí)現(xiàn)本地Service方法控制音樂播放

    這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)本地Service方法控制音樂播放,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-03-03
  • Android-屏幕適配需要注意的地方總結(jié)

    Android-屏幕適配需要注意的地方總結(jié)

    需要注意一下幾個(gè)地方:盡量使用線性布局/盡量使用dip和sp,不要使用px/為不同的分辨率提供不同的布局文件和圖片,接下來為你詳細(xì)介紹下,感興趣的你可以參考下哈,希望可以幫助到你
    2013-03-03
  • Android視圖綁定方法深入探究

    Android視圖綁定方法深入探究

    這篇文章主要介紹了Android視圖綁定方法,通過視圖綁定viewBinding功能,您可以更輕松地編寫可與視圖交互的代碼。在模塊中啟用視圖綁定之后,系統(tǒng)會為該模塊中的每個(gè)XML
    2023-01-01
  • Android中使用二級緩存、異步加載批量加載圖片完整案例

    Android中使用二級緩存、異步加載批量加載圖片完整案例

    這篇文章主要介紹了Android中使用二級緩存、異步加載批量加載圖片完整案例,本文講解了實(shí)現(xiàn)的過程以及核心代碼展示,并給出了完整項(xiàng)目源碼,需要的朋友可以參考下
    2015-06-06
  • Android中執(zhí)行java命令的方法及java代碼執(zhí)行并解析shell命令

    Android中執(zhí)行java命令的方法及java代碼執(zhí)行并解析shell命令

    這篇文章給大家介紹Android中執(zhí)行java命令的方法及java代碼執(zhí)行并解析shell命令,需要的朋友一起學(xué)習(xí)
    2015-11-11

最新評論

女性| 郁南县| 衢州市| 文成县| 犍为县| 镶黄旗| 乌海市| 五大连池市| 松滋市| 手机| 无极县| 正宁县| 高雄县| 唐山市| 民勤县| 阿合奇县| 名山县| 合肥市| 石柱| 拜城县| 舞阳县| 泽州县| 凤翔县| 邻水| 松原市| 都匀市| 沧州市| 墨玉县| 安吉县| 乐业县| 阳原县| 济源市| 西青区| 抚远县| 汕头市| 西昌市| 榆中县| 满洲里市| 吴江市| 仙桃市| 龙门县|