在我的应用程序中,我希望用户能够选择一个包含在其中的图像的某些内容ImageView.
要选择内容,我将该ImageView类子类化,使其实现,OnTouchListener以便在其上绘制一个由用户决定的带边框的矩形.
下面是绘图结果的示例(要了解它的工作原理,您可以将其视为在桌面上单击鼠标并拖动鼠标时):

现在我需要确定哪些像素的的Bitmap图像对应于所选择的部分.很容易确定哪些是ImageView属于矩形的点,但我不知道如何获得对应的像素,因为它ImageView具有与原始图像不同的纵横比.
我遵循这里特别描述的方法,但也在这里,但我并不完全满意,因为在我看来,对应关系是在像素和点之间的1对1 ImageView,并没有给我原始图像上的所有对应像素到选定的区域.
hoveredRect在其ImageView内部的点上调用矩形是:
class Point {
float x, y;
@Override
public String toString() {
return x + ", " + y;
}
}
Vector<Point> pointsInRect = new Vector<Point>();
for( int x = hoveredRect.left; x <= hoveredRect.right; x++ ){
for( int y = hoveredRect.top; y <= hoveredRect.bottom; y++ ){
Point pointInRect = new Point();
pointInRect.x …Run Code Online (Sandbox Code Playgroud) 我需要将onTouch事件的X,Y坐标映射到ImageView内的Bitmap X,Y坐标来执行此操作我使用以下方法.
然而,这种方法似乎只有在以下情况下才能起作用:
a)完全缩放图像(一直进入)
b)无论如何都可以在我的应用程序全屏显示时工作
final int index = event.getActionIndex();
touchLocation = new float[] {
event.getX(index), event.getY(index)
};
Matrix matrix = new Matrix();
ImageView view = getImageView();
view.getImageMatrix().invert(matrix);
matrix.postTranslate(view.getScrollX(), view.getScrollY());
matrix.mapPoints(touchLocation);
// touchLocation[0] is real x and [1] is real y
Run Code Online (Sandbox Code Playgroud)
但是我的活动是一个ActionBar活动,所以我在Y轴上的位置有点错误.我试着扣除ActionBar和StatusBar的高度,但这并不总是有效.
奇怪的是,在全屏幕上无论我是否完全缩放我的图像都无关紧要我总是得到正确的坐标,但是对于任何其他活动类型,这都不会正确地映射点.
背景: 我有一个ImageView,我已经修改为可滚动(拖动)和缩放(缩放缩放).我使用了"Hello,Android"第3版中提到的确切技术,也可以在这里找到.此技术使用矩阵变换来处理滚动和缩放.
我的问题: 当用户点击图像时,无论图像如何滚动或放大,我都希望该拍子的坐标与图像本身相关.例如,如果我的图像是1000x2000,我滚动并缩放图像.然后我在某个点点击图像,我想知道与1000x2000相关的那个点,而不仅仅是屏幕区域.我怎样才能做到这一点?
我有一个画布,我设置了一条路径
Path path = new Path();
path.moveTo(1, 1);
path.lineTo(90, 1);
path.lineTo(90, 60);
path.lineTo(1, 60);
canvas.drawPath(path,p);
Run Code Online (Sandbox Code Playgroud)
现在我想向这个路径对象实现一个触摸侦听器.
我在自定义ImageView上实现了缩放选项,并在此自定义ImageView的onDraw方法的画布上绘制了这些线条.所以我不能通过检查用户触摸的坐标来做到这一点.
我知道路径对象不是View Class的子节点,因此我无法在其中实现touchListner.但我真正需要的是类似的东西
path.setOnTouchListener(myTouchListner);
Run Code Online (Sandbox Code Playgroud)
有没有人知道如何实现它?任何帮助表示赞赏.
我没有什么问题。
我得到一个图像,转换为Bitmap并用这个Bitmap填充图像视图。
所以问题是,如何获取这个位图的真实坐标(X,Y)?
为了更好地说明,我附上了一张图片:

如图所示,例如我得到了一个自定义分辨率的图像,用户可以通过黄点制作透视图。
所以我需要知道,如何从 ImageView 中获取位图的真实坐标。
我目前所做的(但这种方法不正确):
我从 imageView 中获取宽度/高度并使用此分辨率重新创建新位图。
Bitmap bt = Bitmap.CreateScaledBitmap(BitmapFactory.DecodeResource(Activity.Resources, Resource.Drawable.test),800,1420,false); //800 width 1420 height
imgView.SetImageBitmap(bt);
Run Code Online (Sandbox Code Playgroud)
通过TouchListener 的实现(方法GetX() / GetY()),我得到了点的坐标(覆盖在位图上的黄色圆圈),问题是这些坐标不正确。
当我在 imageView 上通过 ScaleType.FitXY 拉伸位图时,它对我来说也很有趣(它可以获取位图的真实坐标)?
那么我怎样才能实现我的目标呢?