Java Glide在加载动画jpg时崩溃应用程序

Java Glide在加载动画jpg时崩溃应用程序,java,android,exception-handling,android-glide,Java,Android,Exception Handling,Android Glide,所以,我使用Glide从imgur加载照片,代码如下 try { ViewTarget viewTarget = new ViewTarget<SubsamplingScaleImageView, BitmapDrawable>(image_view) { @Override public void onResourceReady(BitmapDrawable bitmap, Transition<? super BitmapDrawab

所以,我使用Glide从imgur加载照片,代码如下

try {
    ViewTarget viewTarget = new ViewTarget<SubsamplingScaleImageView, BitmapDrawable>(image_view) {
        @Override
        public void onResourceReady(BitmapDrawable bitmap, Transition<? super BitmapDrawable> transition) {
            this.view.setImage(ImageSource.bitmap(bitmap.getBitmap()));
        }
    };

    GlideApp.with(this).load(post_to_show.getUrl()).into(viewTarget);
} catch (ClassCastException e){}
试试看{
ViewTarget ViewTarget=新ViewTarget(图像\视图){
@凌驾

public void onResourceReady(位图可绘制位图,转换您可以使用此代码显示gif

load=(ImageView) findViewById(R.id.loadimg);

GlideDrawableImageViewTarget imageViewTarget = new GlideDrawableImageViewTarget(load);
Glide.with(this).load(post_to_show.getUrl()).diskCacheStrategy(DiskCacheStrategy.ALL).into(imageViewTarget);

请检查以下代码,可能会有帮助:

活动\u glide.xml文件。

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
    android:layout_height="match_parent">

   <ImageView
       android:id="@+id/imageView"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content" />

</android.support.constraint.ConstraintLayout>

多亏了@Kaushal Gosaliya,我想出了一种方法来实现这一点,但GIF将仅显示为静态图像

ViewTarget viewTarget = new ViewTarget<SubsamplingScaleImageView, Drawable>(image_view) {
            @Override
            public void onResourceReady(@NonNull Drawable resource, @Nullable Transition<? super Drawable> transition) {
                Bitmap mutableBitmap = Bitmap.createBitmap(resource.getIntrinsicWidth(), resource.getIntrinsicHeight(), Bitmap.Config.RGB_565);
                Canvas canvas = new Canvas(mutableBitmap);
                resource.setBounds(0, 0, resource.getIntrinsicWidth(), resource.getIntrinsicHeight());
                resource.draw(canvas);

                this.view.setImage(ImageSource.bitmap(mutableBitmap));
            }
        };
ViewTarget ViewTarget=新的ViewTarget(图像视图){
@凌驾

公共资源就绪(@NonNull Drawable resource,@Nullable transition为什么它有.jpg即使它是gif.gif也受Glide支持我真的不知道,但它破坏了我的代码。我怎么能检测到它不是.jpg?加载这个我想你可以捕获异常,如果它是一个classcast异常,你可以用gif替换jpg并重新加载图像。我不能用catch例外。我认为这是致命的,因为它会使应用程序崩溃。我可以显示gif,但我必须知道加载它是一个gif,而不是gif。如果这两者都可以,那么我如何使用自定义视图来实现这一点?非常感谢。但是它会显示一个静态图像。如果您有一个将其视为gif的解决方案,我将不胜感激。实际上,现在它不加载图像,只加载GIF第一帧。@Khaledmara我添加了如何使用glide加载图像的代码,请检查。这可能有助于解决您的问题。我想您没有得到我想要的。我可以播放GIF并显示JPEG,问题是:我无法确定它是GIF还是JPEG。所以GIF伪装成JPEG我将使应用程序崩溃。如果我只使用你的第一个解决方案,图像将不会显示。如果我只使用你的第二个解决方案,动画GPEG将使应用程序崩溃。如果我错了,请纠正我。无论如何,非常感谢你的帮助,让我走上了解决问题的正确道路。一旦我的声誉允许,我将对此进行投票。
public class GlideActivity extends AppCompatActivity {

    @BindView(R.id.imageView)ImageView imageView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_glide);

        ButterKnife.bind(this);

        gifImage();
    }

    public void gifImage() {

        Glide.with(this).load("http://imagesourceteam.com/wp-content/uploads/2017/01/rr.jpg").into(imageView);

    }
}
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
    android:layout_height="match_parent">

   <ImageView
       android:id="@+id/imageView"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content" />

</android.support.constraint.ConstraintLayout>
ViewTarget viewTarget = new ViewTarget<SubsamplingScaleImageView, Drawable>(image_view) {
            @Override
            public void onResourceReady(@NonNull Drawable resource, @Nullable Transition<? super Drawable> transition) {
                Bitmap mutableBitmap = Bitmap.createBitmap(resource.getIntrinsicWidth(), resource.getIntrinsicHeight(), Bitmap.Config.RGB_565);
                Canvas canvas = new Canvas(mutableBitmap);
                resource.setBounds(0, 0, resource.getIntrinsicWidth(), resource.getIntrinsicHeight());
                resource.draw(canvas);

                this.view.setImage(ImageSource.bitmap(mutableBitmap));
            }
        };