国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Android > 正文

android仿直播圓點(diǎn)加載效果

2019-10-21 21:46:44
字體:
供稿:網(wǎng)友

今天實(shí)現(xiàn)一個(gè)很多app中使用到的加載進(jìn)度條的效果,可能我們平時(shí)數(shù)據(jù)加載都使用到的是系統(tǒng)自帶的,但是也有很多app加載進(jìn)度條的效果實(shí)現(xiàn)挺好看,就是三個(gè)點(diǎn)不停的水平跑而且是變換顏色的,其實(shí)這個(gè)效果很簡(jiǎn)單,

分析:

第一步:

android,直播,圓點(diǎn)加載

第二步:

android,直播,圓點(diǎn)加載

為了圓的顏色 大小,以及移動(dòng)的距離都對(duì)外開放,采用了自定義屬性的方式,當(dāng)然也可以進(jìn)行設(shè)置,

分析了后 代碼就直接上了,

<?xml version="1.0" encoding="utf-8"?><resources>  <declare-styleable name="CirclePointLoadView">    <attr name="leftPointColor" format="color|reference"></attr>    <attr name="middlePointColor" format="color|reference"></attr>    <attr name="rightPointColor" format="color|reference"></attr>    <attr name="radius" format="integer|reference"></attr>    <attr name="translationDistance" format="dimension|reference"></attr>  </declare-styleable></resources>

這是自定義屬性,左,中,右顏色,圓的半徑,以及圓x軸移動(dòng)的距離

CircleItemPointView.java

是每個(gè)子view的代碼,很簡(jiǎn)單就是畫了圓,然后設(shè)置了下paint的顏色而已

 

package com.circle.load;import android.content.Context;import android.graphics.Canvas;import android.graphics.Paint;import android.support.annotation.Nullable;import android.util.AttributeSet;import android.view.View;/** * Created by zhouguizhijxhz on 2018/5/29. */public class CircleItemPointView extends View {  private Paint mPaint;  private int mColor;  public CircleItemPointView(Context context) {    this(context,null);  }  public CircleItemPointView(Context context, @Nullable AttributeSet attrs) {    this(context, attrs,0);  }  public CircleItemPointView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {    super(context, attrs, defStyleAttr);    mPaint = new Paint();    mPaint.setAntiAlias(true);    mPaint.setDither(true);  }  @Override  protected void onDraw(Canvas canvas) {    int cx = getWidth()/2;    int cy = getHeight()/2;    canvas.drawCircle(cx,cy,cx,mPaint);  }  /**   * 切換顏色   */  public void changeColor(int color){    mColor = color;    mPaint.setColor(color);    invalidate();  }  public void setColor(int color){    mColor = color;    mPaint.setColor(color);    invalidate();  }  /**   * 獲取當(dāng)前的顏色   */  public int getColor() {    return mColor;  }}

CirclePointLoadView.java

 

package com.circle.load;import android.animation.Animator;import android.animation.AnimatorListenerAdapter;import android.animation.AnimatorSet;import android.animation.ObjectAnimator;import android.content.Context;import android.content.res.TypedArray;import android.graphics.Color;import android.util.AttributeSet;import android.view.View;import android.view.animation.AccelerateInterpolator;import android.widget.RelativeLayout;/** * Created by zhouguizhijxhz on 2018/5/29. */public class CirclePointLoadView extends RelativeLayout{  private int defaultLeftColor = Color.parseColor("#FF8247");  private int defaultMiddleColor = Color.parseColor("#EE4000");  private int defaultRightColor = Color.parseColor("#CD2626");  private int leftColor;  private int middleColor;  private int rightColor;  private int defaultCircleRadius = 10;  private int defaultTranslationDistance = 36;  private int translationDistance;  private static final long ANIMATION_DURATION = 400;  private int radius;  private CircleItemPointView leftView;  private CircleItemPointView middleView;  private CircleItemPointView rightView;  private AnimatorSet spreadAnimation;  private AnimatorSet closedAnimation;  public CirclePointLoadView(Context context) {    this(context,null);  }  public CirclePointLoadView(Context context, AttributeSet attrs) {    this(context, attrs,0);  }  public CirclePointLoadView(Context context, AttributeSet attrs, int defStyleAttr) {    super(context, attrs, defStyleAttr);    parseAttrs(context,attrs);    addViewToLayout(context);  }  private void addViewToLayout(Context context) {    if(null==context){      return;    }    leftView = createView(context);    leftView.setColor(leftColor);    middleView = createView(context);    middleView.setColor(middleColor);    rightView = createView(context);    rightView.setColor(rightColor);    addView(leftView);    addView(rightView);    addView(middleView);  }  /**   * 展開動(dòng)畫   */  private void spreadAnimation() {    ObjectAnimator leftTranslationAnimator = ObjectAnimator.ofFloat(leftView,"translationX",0,-translationDistance);    ObjectAnimator rightTranslationAnimator = ObjectAnimator.ofFloat(rightView,"translationX",0,translationDistance);    spreadAnimation = new AnimatorSet();    spreadAnimation.setDuration(ANIMATION_DURATION);    spreadAnimation.playTogether(leftTranslationAnimator,rightTranslationAnimator);    spreadAnimation.addListener(new AnimatorListenerAdapter() {      @Override      public void onAnimationEnd(Animator animation) {        closedAnimation();      }    });    spreadAnimation.start();  }  private void closedAnimation() {    ObjectAnimator leftTranslationAnimator = ObjectAnimator.ofFloat(leftView,"translationX",-translationDistance,0);    ObjectAnimator rightTranslationAnimator = ObjectAnimator.ofFloat(rightView,"translationX",translationDistance,0);    closedAnimation = new AnimatorSet();    closedAnimation.setInterpolator(new AccelerateInterpolator());    closedAnimation.setDuration(ANIMATION_DURATION);    closedAnimation.playTogether(leftTranslationAnimator,rightTranslationAnimator);    closedAnimation.addListener(new AnimatorListenerAdapter() {      @Override      public void onAnimationEnd(Animator animation) {        int leftColor = leftView.getColor();        int rightColor = rightView.getColor();        int middleColor = middleView.getColor();        middleView.changeColor(leftColor);        rightView.changeColor(middleColor);        leftView.changeColor(rightColor);        spreadAnimation();      }    });    closedAnimation.start();  }  public CircleItemPointView createView(Context context) {    CircleItemPointView itemPointView = new CircleItemPointView(context);    LayoutParams params = new LayoutParams(DensityUtils.dp2px(context,radius),DensityUtils.dp2px(context,radius));    params.addRule(CENTER_IN_PARENT);    itemPointView.setLayoutParams(params);    return itemPointView;  }  private void parseAttrs(Context context, AttributeSet attrs) {    if(null==context||null==attrs){      return;    }    TypedArray typedArray = context.obtainStyledAttributes(attrs,R.styleable.CirclePointLoadView);    leftColor = typedArray.getColor(R.styleable.CirclePointLoadView_leftPointColor,defaultLeftColor);    middleColor = typedArray.getColor(R.styleable.CirclePointLoadView_middlePointColor,defaultMiddleColor);    rightColor = typedArray.getColor(R.styleable.CirclePointLoadView_rightPointColor,defaultRightColor);    radius = typedArray.getInteger(R.styleable.CirclePointLoadView_radius,defaultCircleRadius);    translationDistance = (int) typedArray.getDimension(R.styleable.CirclePointLoadView_translationDistance,defaultTranslationDistance);    translationDistance = DensityUtils.dp2px(context,translationDistance);    typedArray.recycle();  }  /**   * 開啟動(dòng)畫   */  public void startLoad(){    if(spreadAnimation==null){      spreadAnimation();    }  }  /**   * 停止動(dòng)畫   */  public void stopLoad(){    clearAnimation();    leftView.setVisibility(View.GONE);    middleView.setVisibility(View.GONE);    rightView.setVisibility(View.GONE);  }  /**   * 設(shè)置左側(cè)顏色值   * @param leftColor   */  public void setLeftColor(int leftColor) {    this.leftColor = leftColor;  }  /**   * 設(shè)置中間顏色值   * @param middleColor   */  public void setMiddleColor(int middleColor) {    this.middleColor = middleColor;  }  /**   * 設(shè)置右側(cè)顏色值   * @param rightColor   */  public void setRightColor(int rightColor) {    this.rightColor = rightColor;  }  /**   * 設(shè)置圓的半徑   * @param radius   */  public void setRadius(int radius) {    this.radius = radius;  }  /**   * 設(shè)置動(dòng)畫x軸方向移動(dòng)的距離   * @param translationDistance   */  public void setTranslationDistance(int translationDistance) {    translationDistance = translationDistance;  }}

效果圖:

android,直播,圓點(diǎn)加載

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


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到Android開發(fā)頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 九龙县| 永宁县| 兰考县| 龙海市| 弥渡县| 乐昌市| 荥阳市| 车致| 余庆县| 大庆市| 商城县| 喀喇| 黄山市| 镇远县| 同德县| 伊宁县| 青田县| 四子王旗| 会同县| 淮滨县| 阿拉善左旗| 墨脱县| 湟中县| 沂源县| 承德县| 南溪县| 定南县| 偏关县| 屏边| 卓尼县| 应城市| 荣成市| 手机| 文昌市| 万荣县| 铜山县| 武宁县| 苏州市| 康乐县| 赤壁市| 五大连池市|