Переход глиссады (withCrossFade) при использовании SimpleTarget - PullRequest
0 голосов
/ 04 июля 2018

У меня есть требование масштабировать изображение на основе текущей ориентации экрана. Если экран LANDSCAPE, а изображение LANDSCAPE, то масштабируйте его до FIT_XY. В противном случае, если изображение PORTRAIT, масштабируйте его до FIT_CENTER. И наоборот для ориентации экрана ПОРТРЕТ.

Вот что я сделал до сих пор:

 Glide.with(getContext())
      .asBitmap()
      .load(displayedImageFile)
      .transition(BitmapTransitionOptions.withCrossFade(1000))
      .into(new SimpleTarget<Bitmap>()
      {
          @Override
          public void onResourceReady(Bitmap bitmap, Transition<? super Bitmap> transition)
          {
              int imgOrt = (bitmap.getWidth() >= bitmap.getHeight()) ? Configuration.ORIENTATION_LANDSCAPE : Configuration.ORIENTATION_PORTRAIT;
              switch (screenOrientation)
              {
                  case Configuration.ORIENTATION_PORTRAIT:
                      if (imgOrt == Configuration.ORIENTATION_PORTRAIT)
                          imageview.setScaleType(ImageView.ScaleType.FIT_XY);
                      else
                          imageview.setScaleType(ImageView.ScaleType.FIT_CENTER);
                      break;
                  case Configuration.ORIENTATION_LANDSCAPE:
                      if (imgOrt == Configuration.ORIENTATION_LANDSCAPE)
                          imageview.setScaleType(ImageView.ScaleType.FIT_XY);
                      else
                          imageview.setScaleType(ImageView.ScaleType.FIT_CENTER);
                      break;
              }
              imageview.setImageBitmap(bitmap);
          }
      });

Есть идеи, почему withCrossFade() не работает? Я новичок с Glide. На самом деле, только началось вчера с Glide. Я извиняюсь, если это что-то простое, но я не могу понять, что не так с моим кодом.

Единственное, что я подозреваю, это то, что анимация не работает, когда я использую imageview.setImageBitmap(bitmap);? Есть идеи, как преодолеть эту проблему?

1 Ответ

0 голосов
/ 07 февраля 2019

Если бы эту проблему решили, то решили ее следующим образом, используя Glide 4.8.0 (о, и с Kotlin, легко переводимым на Java):

Glide.with(context)
            .asBitmap()
            .load(Uri.fromFile(bitmapFile))
            .transition(BitmapTransitionOptions.withCrossFade())
            .apply(RequestOptions().diskCacheStrategy(DiskCacheStrategy.ALL).centerCrop())
            .into(object: CustomViewTarget<ImageView, Bitmap>(imageView) {
                override fun onLoadFailed(errorDrawable: Drawable?) {}
                override fun onResourceCleared(placeholder: Drawable?) {
                    imageView.setImageDrawable(placeholder)
                }
                override fun onResourceReady(resource: Bitmap, transition: Transition<in Bitmap>?) {
                    transition?.let {
                        val didSucceedTransition = transition.transition(resource, BitmapImageViewTarget(imageView))
                        if(!didSucceedTransition) imageView.setImageBitmap(resource)
                    }
                }
            })
...