Esempio n. 1
0
  public void displayImage(final String url) {
    if (!imageShown) {
      actuallyLoaded = url;
      final SubsamplingScaleImageView i =
          (SubsamplingScaleImageView) rootView.findViewById(R.id.submission_image);

      i.setMinimumDpi(70);
      i.setMinimumTileDpi(240);
      final ProgressBar bar = (ProgressBar) rootView.findViewById(R.id.progress);
      bar.setIndeterminate(false);
      bar.setProgress(0);

      final Handler handler = new Handler();
      final Runnable progressBarDelayRunner =
          new Runnable() {
            public void run() {
              bar.setVisibility(View.VISIBLE);
            }
          };
      handler.postDelayed(progressBarDelayRunner, 500);

      ImageView fakeImage = new ImageView(getActivity());
      fakeImage.setLayoutParams(new LinearLayout.LayoutParams(i.getWidth(), i.getHeight()));
      fakeImage.setScaleType(ImageView.ScaleType.CENTER_CROP);

      File f =
          ((Reddit) getActivity().getApplicationContext()).getImageLoader().getDiscCache().get(url);
      if (f != null && f.exists()) {
        imageShown = true;

        try {
          i.setImage(ImageSource.uri(f.getAbsolutePath()));
        } catch (Exception e) {
          // todo  i.setImage(ImageSource.bitmap(loadedImage));
        }
        (rootView.findViewById(R.id.progress)).setVisibility(View.GONE);
        handler.removeCallbacks(progressBarDelayRunner);

        previous = i.scale;
        final float base = i.scale;
        i.setOnZoomChangedListener(
            new SubsamplingScaleImageView.OnZoomChangedListener() {
              @Override
              public void onZoomLevelChanged(float zoom) {
                if (zoom > previous && !hidden && zoom > base) {
                  hidden = true;
                  final View base = rootView.findViewById(R.id.base);

                  ValueAnimator va = ValueAnimator.ofFloat(1.0f, 0.2f);
                  int mDuration = 250; // in millis
                  va.setDuration(mDuration);
                  va.addUpdateListener(
                      new ValueAnimator.AnimatorUpdateListener() {
                        public void onAnimationUpdate(ValueAnimator animation) {
                          Float value = (Float) animation.getAnimatedValue();
                          base.setAlpha(value);
                        }
                      });
                  va.start();
                  // hide
                } else if (zoom <= previous && hidden) {
                  hidden = false;
                  final View base = rootView.findViewById(R.id.base);

                  ValueAnimator va = ValueAnimator.ofFloat(0.2f, 1.0f);
                  int mDuration = 250; // in millis
                  va.setDuration(mDuration);
                  va.addUpdateListener(
                      new ValueAnimator.AnimatorUpdateListener() {
                        public void onAnimationUpdate(ValueAnimator animation) {
                          Float value = (Float) animation.getAnimatedValue();
                          base.setAlpha(value);
                        }
                      });
                  va.start();
                  // unhide
                }
                previous = zoom;
              }
            });
      } else {
        ((Reddit) getActivity().getApplicationContext())
            .getImageLoader()
            .displayImage(
                url,
                new ImageViewAware(fakeImage),
                new DisplayImageOptions.Builder()
                    .resetViewBeforeLoading(true)
                    .cacheOnDisk(true)
                    .imageScaleType(ImageScaleType.NONE)
                    .cacheInMemory(false)
                    .build(),
                new ImageLoadingListener() {
                  private View mView;

                  @Override
                  public void onLoadingStarted(String imageUri, View view) {
                    imageShown = true;
                    mView = view;
                  }

                  @Override
                  public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
                    Log.v(LogUtil.getTag(), "LOADING FAILED");
                  }

                  @Override
                  public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
                    imageShown = true;
                    File f = null;
                    if (getActivity() != null)
                      f =
                          ((Reddit) getActivity().getApplicationContext())
                              .getImageLoader()
                              .getDiscCache()
                              .get(url);
                    if (f != null && f.exists()) {
                      i.setImage(ImageSource.uri(f.getAbsolutePath()));
                    } else {
                      i.setImage(ImageSource.bitmap(loadedImage));
                    }
                    (rootView.findViewById(R.id.progress)).setVisibility(View.GONE);
                    handler.removeCallbacks(progressBarDelayRunner);

                    previous = i.scale;
                    final float base = i.scale;
                    i.setOnZoomChangedListener(
                        new SubsamplingScaleImageView.OnZoomChangedListener() {
                          @Override
                          public void onZoomLevelChanged(float zoom) {
                            if (zoom > previous && !hidden && zoom > base) {
                              hidden = true;
                              final View base = rootView.findViewById(R.id.base);

                              ValueAnimator va = ValueAnimator.ofFloat(1.0f, 0.2f);
                              int mDuration = 250; // in millis
                              va.setDuration(mDuration);
                              va.addUpdateListener(
                                  new ValueAnimator.AnimatorUpdateListener() {
                                    public void onAnimationUpdate(ValueAnimator animation) {
                                      Float value = (Float) animation.getAnimatedValue();
                                      base.setAlpha(value);
                                    }
                                  });
                              va.start();
                              // hide
                            } else if (zoom <= previous && hidden) {
                              hidden = false;
                              final View base = rootView.findViewById(R.id.base);

                              ValueAnimator va = ValueAnimator.ofFloat(0.2f, 1.0f);
                              int mDuration = 250; // in millis
                              va.setDuration(mDuration);
                              va.addUpdateListener(
                                  new ValueAnimator.AnimatorUpdateListener() {
                                    public void onAnimationUpdate(ValueAnimator animation) {
                                      Float value = (Float) animation.getAnimatedValue();
                                      base.setAlpha(value);
                                    }
                                  });
                              va.start();
                              // unhide
                            }
                            previous = zoom;
                          }
                        });
                  }

                  @Override
                  public void onLoadingCancelled(String imageUri, View view) {
                    Log.v(LogUtil.getTag(), "LOADING CANCELLED");
                  }
                },
                new ImageLoadingProgressListener() {
                  @Override
                  public void onProgressUpdate(String imageUri, View view, int current, int total) {
                    ((ProgressBar) rootView.findViewById(R.id.progress))
                        .setProgress(Math.round(100.0f * current / total));
                  }
                });
      }

      rootView
          .findViewById(R.id.submission_image)
          .setOnClickListener(
              new View.OnClickListener() {

                @Override
                public void onClick(View v2) {
                  getActivity().finish();
                }
              });
    }
  }