欧美大屁股bbbbxxxx,狼人大香伊蕉国产www亚洲,男ji大巴进入女人的视频小说,男人把ji大巴放进女人免费视频,免费情侣作爱视频

歡迎來(lái)到入門教程網(wǎng)!

Android

當(dāng)前位置:主頁(yè) > 軟件編程 > Android >

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

來(lái)源:本站原創(chuàng)|時(shí)間:2020-01-10|欄目:Android|點(diǎn)擊: 次

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

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

開始繪制view,被頂起的曲線分三段,前后兩端曲線對(duì)稱的,用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í)行過(guò)程中有個(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
   );
   //繪制第三段圓弧,和第一段對(duì)稱
 
   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)就成功啦。

因?yàn)橛星€銜接貝塞爾曲線,感覺(jué)弧度有時(shí)候改變曲線不是很流暢,大家應(yīng)該會(huì)有更好的辦法 歡迎補(bǔ)充!

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持我們。

網(wǎng)頁(yè)制作CMS教程網(wǎng)絡(luò)編程軟件編程腳本語(yǔ)言數(shù)據(jù)庫(kù)服務(wù)器

如果侵犯了您的權(quán)利,請(qǐng)與我們聯(lián)系,我們將在24小時(shí)內(nèi)進(jìn)行處理、任何非本站因素導(dǎo)致的法律后果,本站均不負(fù)任何責(zé)任。

聯(lián)系QQ:835971066 | 郵箱:835971066#qq.com(#換成@)

Copyright © 2002-2020 腳本教程網(wǎng) 版權(quán)所有