java - 理解 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));
解决方案
推荐阅读
- laravel - 部署中的 Laravel 和 vue js
- linux - 如何使用 awk 从多个文件中搜索字符串?
- python - PYTHON Pandas:在两个数据框中用字符串求和
- sql - 缺少的括号在哪里?
- recursion - 有人能解释一下这个递归吗?谢谢
- reactjs - 警告:React 无法识别 DOM 元素上的 `secondaryFill` 属性
- python - 在我的 Pycharm CE 中找不到探查器选项
- reactjs - 如何调用路由路径 2,3,后跟 5,6,如果是 5,6,我应该重定向到另一个页面
- coq - 如何找到两个值之间的相等关系
- javascript - 将文本添加到 MapBox 标记