示例#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();
                }
              });
    }
  }
示例#2
0
  private void loadImage(String url) {
    final ProgressBar bar = (ProgressBar) rootView.findViewById(R.id.progress);
    bar.setIndeterminate(false);
    bar.setProgress(0);
    if (url != null && ContentType.isImgurLink(url)) {
      url = url + ".png";
    }
    ImageView fakeImage = new ImageView(getActivity());
    fakeImage.setLayoutParams(new LinearLayout.LayoutParams(image.getWidth(), image.getHeight()));
    fakeImage.setScaleType(ImageView.ScaleType.CENTER_CROP);

    ((Reddit) getActivity().getApplication())
        .getImageLoader()
        .displayImage(
            url,
            new ImageViewAware(fakeImage),
            ImageLoaderUtils.options,
            new ImageLoadingListener() {
              private View mView;

              @Override
              public void onLoadingStarted(String imageUri, View view) {
                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) {
                image.setImage(ImageSource.bitmap(loadedImage));
                (rootView.findViewById(R.id.progress)).setVisibility(View.GONE);

                if (type == ContentType.ImageType.IMAGE || type == ContentType.ImageType.IMGUR) {
                  image.setMinimumDpi(30);
                  previous = image.scale;
                  final float base = image.scale;
                  image.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));
              }
            });
  }