【问题标题】:How to measure Picasso .fit()如何测量毕加索 .fit()
【发布时间】:2016-06-09 03:52:09
【问题描述】:

将图像加载到视图后,我希望能够测量加载图像占用的专用布局的哪个部分,以便限制在点击和拖动图像时移动注释。我必须有这些限制才能将此注释的移动(上/下)限制为位图高度。 Picasso Target 在这种情况下没有帮助,因为它正在加载全宽/全高图像,而不是通过 .fit().centerInside() 调整大小。 目前,我正在使用 Pallete Callback,但如果我需要使用一些自定义回调来获取所需的 dips 或任何单位的信息,我可以放弃它)

Picasso.with(this)
                    .load(file)
                    .fit()
                    .centerInside()
                    .transform(PaletteTransformation.instance())
                    .into(oneImage, new PaletteTransformation.PaletteCallback(oneImage) {
                        @Override
                        public void onSuccess(Palette palette) {
                            int bgColor = getBackgroundColor(palette);
                            if (bgColor != -1)
                                fullScreenLayout.setBackgroundColor(bgColor);
                        }
                    });

【问题讨论】:

    标签: android picasso


    【解决方案1】:

    我的理解(可能是错误的)是,如果您不直接将图像加载到 ImageView 而是加载到 Target 对象,那么您在那里收到的位图将具有您需要的尺寸。然后,如果您有 600 像素高度和图像 400 像素高度的容器 -> 易于计算从顶部和底部 100 的垂直偏移

    【讨论】:

    • 加载到 Target 会给我一个全宽/全高的 Bitmap 对象(以像素为单位),这不是我需要的。 Picasso .fit().centerInside() 将其缩放到“未知”尺寸
    【解决方案2】:

    在没有更好的(或不知道直接来自毕加索的解决方案)的情况下, 我实现了:

    1. 测量 imageView + 测量 annotatingView (使用 ViewObserver)
    2. 然后使用毕加索“目标”加载(与加载到 imageView) 来获取位图尺寸和纵横比
    3. 基于原始位图纵横比(它是.fit,所以它会
      消耗全宽或全高)
    4. 我们现在可以计算比例因子,所以很明显
    5. 如果是全宽,并且我们知道位图宽度和图像视图宽度,我们也知道 知道缩放位图高度消耗的imageView

      private void measureHeights() {
      ViewTreeObserver viewTreeObserver = imageLayout.getViewTreeObserver();
      if (viewTreeObserver.isAlive()) {
          viewTreeObserver.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
              @Override
              public void onGlobalLayout() {
                  if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {
                      imageLayout.getViewTreeObserver().removeGlobalOnLayoutListener(this);
                  } else {
                      imageLayout.getViewTreeObserver().removeOnGlobalLayoutListener(this);
                  }
                  imageViewWidth = imageLayout.getWidth();
                  imageViewHeight = imageLayout.getHeight();
              }
          });
      }
      
      ViewTreeObserver viewTreeObserverAnno = annotationLayout.getViewTreeObserver();
      if (viewTreeObserverAnno.isAlive()) {
          viewTreeObserverAnno.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
              @Override
              public void onGlobalLayout() {
                  if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {
                      annotationLayout.getViewTreeObserver().removeGlobalOnLayoutListener(this);
      
                  } else {
                      annotationLayout.getViewTreeObserver().removeOnGlobalLayoutListener(this);
                  }
                  annotationViewHeight = annotationLayout.getHeight();
              }
          });
      }
      

      }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-18
      • 1970-01-01
      • 2017-08-05
      • 2016-02-09
      • 1970-01-01
      • 1970-01-01
      • 2015-11-15
      • 2015-11-25
      相关资源
      最近更新 更多