Android自定義動(dòng)畫系列八汉匙,今天來(lái)分享第八個(gè)自定義Loading動(dòng)畫(IntertwineBuilder)碉熄,名字就叫交織
籽懦,這個(gè)動(dòng)畫效果一般暴拄,簡(jiǎn)單分享下吧宛畦。效果圖如下:
GIF有點(diǎn)大,手機(jī)流量請(qǐng)三思揍移。
效果圖
介紹
首先依舊是聲明次和,我做這些動(dòng)畫的初衷是為了學(xué)習(xí)和分享,所以希望大家可以指點(diǎn)錯(cuò)誤那伐,讓我更好的進(jìn)步踏施。(系列加載動(dòng)畫的截止時(shí)間:我放棄的時(shí)候)。
今天放假第一天罕邀,心還沒回來(lái)畅形,還想玩,想玩诉探,玩~??日熬。
上一個(gè)動(dòng)畫鏈接:Android自定義加載動(dòng)畫-感染體
正文
與前一個(gè)動(dòng)畫相似,繼承基類 BaseBallBuilder
肾胯,具體的介紹可以見上一個(gè)動(dòng)畫竖席,或者前往Github上進(jìn)行查看(進(jìn)去了就給個(gè)star吧耘纱,??),這里簡(jiǎn)單分享下實(shí)現(xiàn)方法吧毕荐。
@Override
protected void initParams(Context context)
{//參數(shù)初始化
mBallR = getAllSize();//圓半徑
mPath = new Path();//路徑
initPaint(5);//畫筆
initPoints(mBallR);//初始化圓點(diǎn)
}
@Override
protected void onDraw(Canvas canvas)
{
drawBall(canvas);//畫圓
}
/**
* 繪制小球
*
* @param canvas
*/
private void drawBall(Canvas canvas)
{
canvas.save();
mPaint.setStyle(Paint.Style.FILL_AND_STROKE);
super.drawBall(canvas, mPath, mPaint);
canvas.restore();
}
下面對(duì)圓的各個(gè)點(diǎn)偏移量進(jìn)行處理束析,也是這個(gè)動(dòng)畫的主要方法。關(guān)注這里就行了憎亚,大概的注視都寫在旁邊了员寇,應(yīng)該很簡(jiǎn)單的。
@Override
protected void computeUpdateValue(ValueAnimator animation, @FloatRange(from = 0.0, to = 1.0) float animatedValue)
{
switch (mCurrAnimatorState)
{
case 0://交織
animation.setInterpolator(new AccelerateInterpolator());
for (int i = 0; i < mBallPoints.size(); i++)
{
CirclePoint circlePoint = mBallPoints.get(i);
if (2 <= i && i <= 7)
{//處理右下方的所有點(diǎn)
circlePoint.setOffsetX(-mBallR * (1 - animatedValue));
circlePoint.setOffsetY(-mBallR * (1 - animatedValue));
}
else
{
circlePoint.setOffsetX(mBallR * (1 - animatedValue));
circlePoint.setOffsetY(mBallR * (1 - animatedValue));
}
}
break;
case 1://還原
animation.setInterpolator(new AccelerateInterpolator());
for (int i = 0; i < mBallPoints.size(); i++)
{
CirclePoint circlePoint = mBallPoints.get(i);
if (2 <= i && i <= 7)
{//處理右下方的所有點(diǎn)
circlePoint.setOffsetX(-mBallR * (animatedValue));
circlePoint.setOffsetY(-mBallR * (animatedValue));
}
else
{
circlePoint.setOffsetX(mBallR * (animatedValue));
circlePoint.setOffsetY(mBallR * (animatedValue));
}
}
break;
}
}
@Override
public void onAnimationRepeat(Animator animation)
{
if (++mCurrAnimatorState > FINAL_STATE)
{//還原到第一階段
mCurrAnimatorState = 0;
for (CirclePoint point : mBallPoints)
{//恢復(fù)偏移量
point.setOffsetY(0);
point.setOffsetX(0);
}
}
}
總結(jié)
小伙伴們第美,要是想看更多細(xì)節(jié)蝶锋,可以前往文章最下面的Github鏈接,如果大家覺得ok的話什往,希望能給個(gè)喜歡扳缕,最渴望的是在Github上給個(gè)star。謝謝了恶守。
如果大家有什么更好的方案第献,或者想要實(shí)現(xiàn)的加載效果,可以給我留言或者私信我兔港,我會(huì)想辦法實(shí)現(xiàn)出來(lái)給大家庸毫。謝謝支持。
Github:zyao89/ZCustomView
作者:Zyao89衫樊;轉(zhuǎn)載請(qǐng)保留此行飒赃,謝謝;
個(gè)人博客:https://zyao89.cn