<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Android仿花束直播加載動(dòng)畫

          共 3519字,需瀏覽 8分鐘

           ·

          2021-10-11 19:25

          效果圖


          分析動(dòng)畫

          首先分析動(dòng)畫,如上圖所示:動(dòng)畫由三個(gè)圓形幾何圖形組成,中間圓形圖案不動(dòng),左側(cè)右側(cè)圓形圖案向中間平移,到達(dá)中間后,圓形圖案變換顏色,在進(jìn)行反向平移。


          動(dòng)畫慢放如下:



          慢放圖我們可以看出圓形圖案交換顏色的順序?yàn)椋?br style="box-sizing: border-box;color: rgb(64, 64, 64);font-family: -apple-system, BlinkMacSystemFont, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;white-space: normal;background-color: rgb(255, 255, 255);">左->中 中->右 右->左


          進(jìn)行繪制

          主要運(yùn)用Drawable動(dòng)畫進(jìn)行繪制。

          public class ThreeBallsLoadingDrawable extends Drawable implements Animatable {}


          準(zhǔn)備三只畫筆,分別繪制三個(gè)圓形圖案

          private Paint mLeftPaint,mMiddlePaint,mRightPaint;
          @Override public void draw(Canvas canvas) {
          canvas.save(); //平移 canvas.translate(translateX,0); canvas.drawCircle(RADIUS,mHeight/2,RADIUS,mLeftPaint); canvas.restore();
          canvas.save(); canvas.drawCircle(mWidth/2,mHeight/2,RADIUS,mMiddlePaint); canvas.restore();
          canvas.save(); canvas.translate(-translateX,0); canvas.drawCircle(mWidth-RADIUS,mHeight/2,RADIUS,mRightPaint);????????canvas.restore(); }


          進(jìn)行動(dòng)畫部分代碼編寫,主要運(yùn)用ValueAnimator


          • 分析動(dòng)畫,左側(cè)圓形圖案,向右平移到中間,然后變換顏色,在反向平移到原來位置。所以我們動(dòng)畫分為兩部分,向內(nèi)平移和向外平移。向內(nèi)平移動(dòng)畫結(jié)束,變化圓形圖案顏色(變化策略在上方)


              /**     * 向內(nèi)平移     */    private void innerMove() {        final ValueAnimator translateXInnerAnimation = ValueAnimator.ofFloat(0,170);        translateXInnerAnimation.setDuration(ANIMATION_DURATION);        translateXInnerAnimation.setInterpolator(new AccelerateInterpolator());        translateXInnerAnimation.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {            @Override            public void onAnimationUpdate(ValueAnimator animation) {                translateX = (float) translateXInnerAnimation.getAnimatedValue();                invalidateSelf();            }        });

          translateXInnerAnimation.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { super.onAnimationEnd(animation); //變換顏色 exchangeColor(); expendMove(); } });
          translateXInnerAnimation.start(); }

          /** * 向外平移 */ private void expendMove(){ final ValueAnimator translateXExpendAnimation = ValueAnimator.ofFloat(170,0); translateXExpendAnimation.setDuration(ANIMATION_DURATION); translateXExpendAnimation.setInterpolator(new DecelerateInterpolator()); translateXExpendAnimation.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { translateX = (float) translateXExpendAnimation.getAnimatedValue(); invalidateSelf(); } });

          translateXExpendAnimation.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { super.onAnimationEnd(animation); innerMove(); } });
          translateXExpendAnimation.start(); }

          /** * 變換顏色方法 */ private void exchangeColor(){ int mLeftPaintColor = mLeftPaint.getColor(); int mRightPaintColor = mRightPaint.getColor(); int mMiddlePaintColor = mMiddlePaint.getColor(); mLeftPaint.setColor(mRightPaintColor); mRightPaint.setColor(mMiddlePaintColor); mMiddlePaint.setColor(mLeftPaintColor);????}


          動(dòng)畫使用

          在ImageView中設(shè)置drawable即可

          ThreeBallsLoadingDrawable threeBallsLoadingDrawable  = new ThreeBallsLoadingDrawable();imageView.setImageDrawable(threeBallsLoadingDrawable);threeBallsLoadingDrawable.start();


          源碼地址:

          https://github.com/mariolu0605/ShapeLoading


          到這里就結(jié)束啦。

          瀏覽 35
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  在线日韩黄色电影 | 思思热在线观看视频 | 亚洲成人影片在线点播 | 大鸡巴操视频 | 日本大香蕉网 |