我正在使用 CropView ,它扩展了 Android ImageView
。它允许在 View 中缩放和移动图像。似乎没有对图像位置或比例的任何公开引用。有没有办法获取图像相对于我可以尝试的常规 ImageView 的位置。
我还尝试在 CropView 上设置一个触摸监听器,它只是打印触摸的 x 和 y 位置,但我不知道如何使用这些来移动获取图像的更新位置。
mCropView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
Log.d(TAG, "///" + event.getX() + " __ " + event.getY());
return false;
}
});
最佳答案
https://github.com/lyft/scissors/blob/master/scissors/src/main/java/com/lyft/android/scissors/CropView.java
CropView 本身就是视口(viewport)。 Cropview 有两个方法 getViewportWidth
并获取视口(viewport)高度。你会需要它们。
缩放、移动、裁剪等的图像是 Drawable。 Drawable 有一个 getBounds 方法,它将返回一个 Rect。您可以从此 Rect 获取顶部、左侧的宽度和高度,但您需要先获取 Drawable。
CropView 将此 Drawable 称为“位图”。您可以通过调用 CropView 的 getImageBitmap() 方法来获取它。
一旦你有了它,调用 getBounds,它会为你提供图像的 Rect。
要获得您想要的 x 和 y,您必须对 Rect 的顶部、左侧、宽度和高度以及从 CropView 的 getViewportHeight 和 getViewportWidth 方法获得的视口(viewport)的高度和宽度进行一些数学计算。
简单地:
vpwidth=cropview.getViewPortWidth();
vpheight=cropview.getViewPortHeight();
imagetop=cropview.getImageBitmap().getBounds().top;
imageleft=cropview.getImageBitmap().getBounds().left;
imageheight=cropview.getImageBitmap().getBounds().height;
imagewidth=cropview.getImageBitmap().getBounds().width;
>
数学在这里