OnTouchListener 坐标不正确



我有一个OnTouchListener,但是当我实际测试我的程序并触摸屏幕时,显示的颜色不是应有的颜色。我使用颜色块进行了测试,它可以工作,但是坐标仍然关闭,如果您在一种颜色上触摸得太远,它会显示另一种颜色。我相信这是因为生成的坐标与整个屏幕而不是图像视图进行比较 - 我希望从中选择它。如何使 OnTouchListener 仅用于图像视图而不是整个屏幕?谢谢。

final Bitmap bitmap2 = ((BitmapDrawable) imageView.getDrawable()).getBitmap();
    imageView.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {

            Matrix inverse = new Matrix();
            v.getMatrix().invert(inverse);
            float[] touchPoint = new float[] {event.getX(), event.getY()};
            inverse.mapPoints(touchPoint);
            int x = Integer.valueOf((int)touchPoint[0]);
            int y = Integer.valueOf((int)touchPoint[1]);

          //  int x = (int) event.getX();
           // int y = (int) event.getY();
            int pixel = bitmap2.getPixel(x, y);

            int red = Color.red(pixel);
            int blue = Color.blue(pixel);
            int green = Color.green(pixel);
            Bitmap bitmap = BitmapFactory.decodeFile(output.getAbsolutePath());
            Paint paint = new Paint();
            paint.setAntiAlias(true);
            paint.setColor(Color.rgb(red,green,blue));

            Bitmap workingBitmap = Bitmap.createBitmap(bitmap);
            Bitmap mutableBitmap = workingBitmap.copy(Bitmap.Config.ARGB_8888, true);

            Canvas canvas = new Canvas(mutableBitmap);
            canvas.drawRect(50, 50, 500, 250, paint);
            ImageView imageView = (ImageView)findViewById(R.id.Image_view);
            imageView.setAdjustViewBounds(true);
            imageView.setImageBitmap(mutableBitmap);

            return true;
            }
    });
}

}

我相信这是因为产生的坐标在 与整个屏幕的比较

是的,您需要做一些简单的推论才能获得图像上的触摸坐标视图:

int[] imgCoords = new int[2];
imageView.getLocationOnScreen(imgCoords);

获取触摸的 X,Y 并从中取出图像视图坐标:

int wholeX = (int) event.getX();
int wholeY = (int) event.getY();
int imageX = wholeX - imgCoords[0];
int imageY = wholeY - imgCoords[1];

最新更新