Fresco: V1.4.0 рдХреЗ рдмрд╛рдж рдПрдирд┐рдореЗрдЯреЗрдб рдЗрдореЗрдЬ рдХреЗ рд▓рд┐рдП рд▓реВрдкрдХрд╛рдЙрдВрдЯ рдХреИрд╕реЗ рд╕реЗрдЯ рдХрд░реЗрдВ?

рдХреЛ рдирд┐рд░реНрдорд┐рдд 11 рдЕрдЧре░ 2017  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: facebook/fresco

рдЕрдм рдореЗрд░рд╛ рд▓рдХреНрд╖реНрдп 5 рдмрд╛рд░ рдЬреАрдЖрдИрдПрдл рдЗрдореЗрдЬ рдкреНрд▓реЗ рдХрд░рдирд╛ рд╣реИред
рдФрд░ рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рдХрд┐ рдПрдирд┐рдореЗрдЯреЗрдб рдЗрдореЗрдЬ рдХреЗ рд▓рд┐рдП рд▓реВрдк рдХреА рд╕рдВрдЦреНрдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП getLoopCount рдПрдХ рд╡рд┐рдзрд┐ рд╣реИ,
рд▓реЗрдХрд┐рди рд╕рд╡рд╛рд▓ рдпрд╣ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдбрд╛рдпрдирд╛рдорд┐рдХ рд╕реЗрдЯ рд▓реВрдкрдХрд╛рдЙрдВрдЯ рдХреИрд╕реЗ рдХрд░реЗрдВред
рдЖрдкрдХреА рдорджрдж рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдореЗрдВред

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ, рдЖрдкрдХрд╛ рдЬреАрдЖрдИрдПрдл рдареАрдХ рд╕реЗ рд╕реНрд╡рд░реВрдкрд┐рдд рд╣реЛрдЧрд╛ рдФрд░ рд▓реВрдк рдЧрд┐рдирддреА рдПрди рдкрд░ рд╕реЗрдЯ рд╣реЛрдЧреАред

рдЕрдиреНрдпрдерд╛, рдЖрдк рдПрдХ рд╕рдВрд╢реЛрдзрд┐рдд рдмреИрдХрдПрдВрдб рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдХреБрдЫ рдЗрд╕ рддрд░рд╣:

public class LoopCountModifyingBackend extends AnimationBackendDelegate {

  private int mLoopCount;

  public LoopCountModifyingBackend(
      <strong i="7">@Nullable</strong> AnimationBackend animationBackend,
      int loopCount) {
    super(animationBackend);
    mLoopCount = loopCount;
  }

  <strong i="8">@Override</strong>
  public int getLoopCount() {
    return mLoopCount;
  }
}

рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдЕрдкрдиреЗ рдПрдирд┐рдореЗрдЯреЗрдб рдбреНрд░рд╛ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдкрд░ рд╕реЗрдЯ рдХрд░реЗрдВ:

final DraweeController controller = Fresco.newDraweeControllerBuilder()
    .setAutoPlayAnimations(true)
    .setUri(uri)
    .setControllerListener(new BaseControllerListener<ImageInfo>() {
      <strong i="12">@Override</strong>
      public void onFinalImageSet(
          String id,
          <strong i="13">@Nullable</strong> ImageInfo imageInfo,
          <strong i="14">@Nullable</strong> Animatable animatable) {
        if (animatable instanceof AnimatedDrawable2) {
          AnimatedDrawable2 animatedDrawable = (AnimatedDrawable2) animatable;
          animatedDrawable.setAnimationBackend(new LoopCountModifyingBackend(animatedDrawable.getAnimationBackend(), 3));
        }
      }
    })
    .build();
simpleDraweeView.setController(controller);

рдЖрдк рдПрдХ рдХрд╕реНрдЯрдо DrawableFactory рднреА рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЗрд╕реЗ рд╕реАрдзреЗ рдХрд░рддрд╛ рд╣реИ рдФрд░ рддрдм рдЗрд╕реЗ рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИ рдЬрдм рдЫрд╡рд┐ PipelineDraweeController рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХреА рдЬрд╛рддреА рд╣реИред

рд╕рднреА 4 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ, рдЖрдкрдХрд╛ рдЬреАрдЖрдИрдПрдл рдареАрдХ рд╕реЗ рд╕реНрд╡рд░реВрдкрд┐рдд рд╣реЛрдЧрд╛ рдФрд░ рд▓реВрдк рдЧрд┐рдирддреА рдПрди рдкрд░ рд╕реЗрдЯ рд╣реЛрдЧреАред

рдЕрдиреНрдпрдерд╛, рдЖрдк рдПрдХ рд╕рдВрд╢реЛрдзрд┐рдд рдмреИрдХрдПрдВрдб рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдХреБрдЫ рдЗрд╕ рддрд░рд╣:

public class LoopCountModifyingBackend extends AnimationBackendDelegate {

  private int mLoopCount;

  public LoopCountModifyingBackend(
      <strong i="7">@Nullable</strong> AnimationBackend animationBackend,
      int loopCount) {
    super(animationBackend);
    mLoopCount = loopCount;
  }

  <strong i="8">@Override</strong>
  public int getLoopCount() {
    return mLoopCount;
  }
}

рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдЕрдкрдиреЗ рдПрдирд┐рдореЗрдЯреЗрдб рдбреНрд░рд╛ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдкрд░ рд╕реЗрдЯ рдХрд░реЗрдВ:

final DraweeController controller = Fresco.newDraweeControllerBuilder()
    .setAutoPlayAnimations(true)
    .setUri(uri)
    .setControllerListener(new BaseControllerListener<ImageInfo>() {
      <strong i="12">@Override</strong>
      public void onFinalImageSet(
          String id,
          <strong i="13">@Nullable</strong> ImageInfo imageInfo,
          <strong i="14">@Nullable</strong> Animatable animatable) {
        if (animatable instanceof AnimatedDrawable2) {
          AnimatedDrawable2 animatedDrawable = (AnimatedDrawable2) animatable;
          animatedDrawable.setAnimationBackend(new LoopCountModifyingBackend(animatedDrawable.getAnimationBackend(), 3));
        }
      }
    })
    .build();
simpleDraweeView.setController(controller);

рдЖрдк рдПрдХ рдХрд╕реНрдЯрдо DrawableFactory рднреА рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЗрд╕реЗ рд╕реАрдзреЗ рдХрд░рддрд╛ рд╣реИ рдФрд░ рддрдм рдЗрд╕реЗ рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИ рдЬрдм рдЫрд╡рд┐ PipelineDraweeController рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХреА рдЬрд╛рддреА рд╣реИред

рдзрдиреНрдпрд╡рд╛рджред

рдЕрдм рдлреНрд░реЗрд╕реНрдХреЛ 2.0.0+ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдХреИрд╕реЗ рдХрд░реЗрдВ?

рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ!

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

rafaelekol picture rafaelekol  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

qiiyue picture qiiyue  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

rhettor picture rhettor  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

satyarths picture satyarths  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

stevenmtang picture stevenmtang  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ