在我的应用程序中,我需要让用户检查一些照片的眼睛.在OnTouchListener.onTouch(...)中,我得到了ImageView的坐标.
如何将此坐标转换为触摸位图的点?
在我的应用程序中,我希望用户能够选择一个包含在其中的图像的某些内容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) 我正在尝试为Android平台制作媒体播放器,我想要添加的功能之一是能够拖动和捏缩放图片.
我遇到的问题是我从"Hello,Android"编辑中复制了这段代码.3:
@Override
public boolean onTouch(View v, MotionEvent event) {
ImageView view = (ImageView) v;
switch (event.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN:
savedMatrix.set(matrix);
start.set(event.getX(), event.getY());
mode = DRAG;
break;
case MotionEvent.ACTION_POINTER_DOWN:
oldDist = spacing(event);
if (oldDist > 10f) {
savedMatrix.set(matrix);
midPoint(mid, event);
mode = ZOOM;
}
break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_POINTER_UP:
mode = NONE;
break;
case MotionEvent.ACTION_MOVE:
if (mode == DRAG) {
matrix.set(savedMatrix);
matrix.postTranslate(event.getX() - start.x, event.getY() - start.y);
}
else if (mode == ZOOM) {
float newDist = spacing(event); …Run Code Online (Sandbox Code Playgroud) 我有一个画布,我设置了一条路径
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)
有没有人知道如何实现它?任何帮助表示赞赏.