首页 > 解决方案 > 理解 Drawable.Callback,invalidateDrawable 和 invalidate() 的区别

问题描述

我正在使用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));

标签: javaandroidviewgraphicsandroid-drawable

解决方案


推荐阅读