Android获取Bitmap在ImageView中的位置

Lon*_*275 5 android bitmap imageview

我正在使用CropView,它扩展了 Android ImageView. 它允许视图中的图像缩放和移动。似乎没有任何公开提及图像位置或比例。有没有一种方法可以获取图像相对于常规 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;
    }
});
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

小智 1

https://github.com/lyft/scissors/blob/master/scissors/src/main/java/com/lyft/android/scissors/CropView.java

CropView 本身就是视口。Cropview 有两个方法 getViewportWidth 和 getViewportHeight。你会需要它们。

经过缩放、移动、裁剪等操作的图像是可绘制的。Drawable 有一个 getBounds 方法,它将返回一个 Rect。您可以从此 Rect 获取顶部、左侧宽度和高度,但您需要先获取 Drawable。

CropView 将此 Drawable 称为“位图”。您可以调用 CropView 的 getImageBitmap() 方法来获取它。

获得后,调用 getBounds 即可获得图像的矩形。

要获得您想要的 x 和 y,您必须对 Rect 的顶部、左侧、宽度和高度以及从 CropView 的 getViewportHeight 和 getViewportWidth 方法获得的视口的高度和宽度进行一些数学运算。

简单地:

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;
Run Code Online (Sandbox Code Playgroud)

>数学在这里