如何衡量毕加索.fit()

时间:2016-06-04 12:55:53

标签: android picasso

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

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);
                        }
                    });

Image Annotation

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

如果没有更好的(或者不知道直接来自毕加索的解决方案), 我实施了:

  1. 测量imageView +测量注释视图 (使用ViewObserver)
  2. 然后使用Picasso“to Target”加载(与加载到的并行) imageView)获取位图尺寸和宽高比
  3. 基于原始位图宽高比(它是.fit所以它将是
    消耗全宽或全高)
  4. 我们现在可以计算比例因子,所以很明显
  5. 如果是全宽,我们也知道位图宽度和imageView宽度 知道比例位图高度消耗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();
            }
        });
    }
    

    }