在将图像加载到视图中之后,我希望能够测量专用布局的哪个部分确实加载图像占用,以便限制移动注释和点击。拖动图像。我必须有这些限制才能将此注释的移动(向上/向下)限制为位图高度。 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);
}
});
答案 0 :(得分:0)
我的理解(可能是错误的)是,如果您不是将图像直接加载到ImageView而是加载到Target对象中,那么您在那里收到的Bitmap将具有您需要的维度。然后,如果你有像600像素高度和图像400px高度的容器 - >容易计算从顶部和顶部的垂直偏移量100底
答案 1 :(得分:0)
如果没有更好的(或者不知道直接来自毕加索的解决方案), 我实施了:
如果是全宽,我们也知道位图宽度和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();
}
});
}
}