Android自定義UI之粒子效果
本文實(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ā)動(dòng)畫 mAnimator.start(); } return super.onTouchEvent(event); } }
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
android使用Textview實(shí)現(xiàn)伸縮效果
這篇文章主要為大家詳細(xì)介紹了android使用Textview實(shí)現(xiàn)伸縮效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-11-11Android Studio無法改變Button背景顏色解決辦法
今天我來和大家探討一個(gè)在Android開發(fā)中常見但可能讓初學(xué)者感到困惑的問題,如何在Android Studio中改變Button的背景顏色,這個(gè)問題看似簡單,但實(shí)際操作中可能會(huì)遇到一些意想不到的挑戰(zhàn),接下來,我將從多個(gè)角度為大家提供解決方案,需要的朋友可以參考下2024-05-05Android webview 內(nèi)存泄露的解決方法
這篇文章主要介紹了Android webview 內(nèi)存泄露的解決方法的相關(guān)資料,需要的朋友可以參考下2017-07-07Android使用WebView.loadUri()打開網(wǎng)頁的方法
這篇文章主要介紹了Android使用WebView.loadUri()打開網(wǎng)頁的方法,結(jié)合實(shí)例形式分析了Android中WebView控件的loadUri()打開網(wǎng)頁的使用技巧,需要的朋友可以參考下2016-01-01android廣角相機(jī)畸變校正算法和實(shí)現(xiàn)示例
今天小編就為大家分享一篇android廣角相機(jī)畸變校正算法和實(shí)現(xiàn)示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-08-08詳解Android的網(wǎng)絡(luò)數(shù)據(jù)存儲(chǔ)
LeanCloud是一種簡單高效的數(shù)據(jù)和文件存儲(chǔ)服務(wù),本文主要介紹了利用LeanCloud來進(jìn)行網(wǎng)絡(luò)數(shù)據(jù)的存儲(chǔ)的實(shí)現(xiàn)方法。具有很好的參考價(jià)值,需要的朋友一起來看下吧2016-12-12Android 詳解Studio引用Library與導(dǎo)入jar
這篇文章主要介紹了Android Studio引用Library與導(dǎo)入jar的相關(guān)資料,需要的朋友可以參考下2017-01-01Android Fragment 和 FragmentManager 的代碼分析
這篇文章主要介紹了Android Fragment 和 FragmentManager 的代碼分析,非常不錯(cuò),具有參考借鑒價(jià)值,需要的的朋友參考下吧2017-01-01