Понимание Поддается Рисованию.Обратный вызов, разница между invalidateDrawable и invalidate()

#java #android #view #graphics #android-drawable

Вопрос:

Я использую StickerView для добавления стикеров в свое приложение, теперь я пытаюсь добавить GIF drawable в качестве стикера, приведенный ниже код работает, GifDrawable он обычно анимирован, но проблема здесь в том, что каждый раз при Drawable изменении следующего кадра все StickerView перерисовывается, снова и снова, это потребляет довольно много памяти.

Я попытался аннулировать рисование только с помощью stickerView.invalidateDrawable(who) , но GifDrawable прекращает анимацию.

    GifDrawable gifDrawable = new GifDrawable(gifSticker.getBuffer());
   gifDrawableSticker.setGIF(true);
   gifDrawable.setCallback(new Drawable.Callback() {
            @Override
            public void invalidateDrawable(@NonNull Drawable who) {

                  stickerView.invalidate(); WORKING FINE
                //stickerView.invalidateDrawable(who); NOT WORKING

            }

            @Override
            public void scheduleDrawable(@NonNull Drawable who, @NonNull Runnable what, long when) {
                  stickerView.scheduleDrawable(who, what, when);
            }

            @Override
            public void unscheduleDrawable(@NonNull Drawable who, @NonNull Runnable what) {
                stickerView.unscheduleDrawable(who, what);
            }
        });
      stickerView.addSticker(new DrawableSticker(gifDrawable));