使用Glide在服务中加载的GIF仅显示第一帧

时间:2016-05-02 23:48:03

标签: android service imageview gif android-glide

我有一个应用,当用户打开指向图片的链接,而不是打开浏览器时,会在ImageView内创建浮动Service并显示在所有其他应用上方(需要android.permission.SYSTEM_ALERT_WINDOW权限)。以下是该应用的链接:Tappic

我想使用Glide添加动画GIF支持(我也尝试过其他库,但结果总是一样)但只显示GIF的第一帧,然后停止。

以下是我在Service

中加载图片的代码
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    dataString = intent.getDataString();
    if (dataString != null)
        Glide.with(this).load(dataString).into(tooltipImage);

    return START_NOT_STICKY;
}

您可以查看显示问题的video hosted in Google Drive

如果我在屏幕上移动视图,您可以看到它可以正常工作。以下是处理移动的代码(tooltipContainer是包含ImageView的布局):

tooltipImage.setOnTouchListener(new View.OnTouchListener() {

    private int initialX;
    private int initialY;
    private float initialTouchX;
    private float initialTouchY;

    @Override
    public boolean onTouch(View view, MotionEvent motionEvent) {
        detector.onTouchEvent(motionEvent);
        switch (motionEvent.getAction()) {
            case MotionEvent.ACTION_DOWN:
                initialX = params.x;
                initialY = params.y;
                initialTouchX = motionEvent.getRawX();
                initialTouchY = motionEvent.getRawY();
                return true;
            case MotionEvent.ACTION_MOVE:
                params.x = initialX + (int) (motionEvent.getRawX() - initialTouchX);
                params.y = initialY + (int) (motionEvent.getRawY() - initialTouchY);
                windowManager.updateViewLayout(tooltipContainer, params);
                return true;
        }
        return false;
    }
});

我不知道使GIF动画工作的问题在哪里。

1 个答案:

答案 0 :(得分:0)

我实际上在个人项目中测试了Glide,Picasso和Fresco的动画GIF。 Glide正确加载动画GIF可能有50%的时间适合我。很多时候它还添加了一些图像伪像和/或跳过的帧。

在这三者中,Fresco实际上对动画GIF完美无缺 - 加载速度快,堆内存开销低,而且我还没有看到任何文物。给Fresco一个镜头,可能是Glide无法正确显示你的GIF。