溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Android如何實(shí)現(xiàn)美團(tuán)外賣底部導(dǎo)航欄動(dòng)畫

發(fā)布時(shí)間:2021-09-27 11:13:40 來源:億速云 閱讀:267 作者:小新 欄目:編程語言

這篇文章主要介紹了Android如何實(shí)現(xiàn)美團(tuán)外賣底部導(dǎo)航欄動(dòng)畫,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

體驗(yàn)了一下美團(tuán)外賣的底部導(dǎo)航欄,感覺動(dòng)畫很流暢,分割線被頂起,還有圖標(biāo)的動(dòng)畫,可能用的lottie,覺得分割線被頂起可以自己寫動(dòng)畫,所以試著寫了一下 。

想自定義view點(diǎn)擊實(shí)現(xiàn)動(dòng)畫效果,自定義view的區(qū)域一定比背景需要被頂起的線要高,所以布局如下:

開始繪制view,被頂起的曲線分三段,前后兩端曲線對稱的,用path繪制曲線,中間段繪制貝塞爾曲線。

那么我們分別繪制三段曲線,用ValueAnimator實(shí)現(xiàn)效果,

private void initAnim() {  value = startValue;  animator = ValueAnimator.ofInt(startValue, halfValue, endValue);//  animator.setInterpolator(new DecelerateInterpolator());  animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {   @Override   public void onAnimationUpdate(ValueAnimator valueAnimator) {    value = (int) valueAnimator.getAnimatedValue();    invalidate();   }  });  animator.setDuration(ANIM_TIME);  animator.start(); }

動(dòng)畫執(zhí)行過程中有個(gè)回彈,那么value的變化需要一個(gè)中間值,

startValue = 0;halfValue = -DensityUtils.dp2px(context, 35);endValue = -DensityUtils.dp2px(context, 25);

在onDraw中繪制曲線代碼如下,

rectF = new RectF((((float)width - (float)contentSize) / 2),    lineToTop + value,    (float) width - ((float)width - (float)contentSize) / 2,    height + value);    if (value < 0 ) {   Path path = new Path();   //繪制第一段圓弧   path.moveTo(rectF.left - 20, lineToTop);   float firstCubicHight = ((float) lineToTop - rectF.top) / 4;   float end = (float) lineToTop - firstCubicHight;   path.cubicTo(     rectF.left - 10,     (float) lineToTop - firstCubicHight / 16,     rectF.left,     (float) lineToTop - firstCubicHight / 12,     rectF.left + 10,     end   );    //繪制第二段圓弧    path.quadTo(     rectF.left + contentSize / 2,     rectF.top * 0.9f,     rectF.right - 10,     end   );   //繪制第三段圓弧,和第一段對稱    path.cubicTo(     rectF.right,     (float) lineToTop - firstCubicHight / 12,     rectF.right + 10,     (float) lineToTop - firstCubicHight / 16,     rectF.right + 20,     lineToTop   );    Path pathBg = new Path();   pathBg.addPath(path);    pathBg.lineTo(rectF.right + 20, height);   pathBg.lineTo(rectF.left - 20, height);   pathBg.lineTo(rectF.left - 20, lineToTop);   canvas.drawPath(pathBg, paintBg);//繪制白色背景    canvas.drawPath(path, paintBgStroke);//繪制曲線   }

最后在onDraw()中畫上圖片也用屬性動(dòng)畫移動(dòng)就成功啦。

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“Android如何實(shí)現(xiàn)美團(tuán)外賣底部導(dǎo)航欄動(dòng)畫”這篇文章對大家有幫助,同時(shí)也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI