Android: How do I get the x y coordinates within an image / ImageView?

后端 未结 4 1010
孤城傲影
孤城傲影 2020-12-04 01:22

I have an image (ImageView) on my screen. The image takes up roughly half of the screen which means that you can click both on the image and on the side of the image.

<
相关标签:
4条回答
  • 2020-12-04 01:33
    imageview.setOnTouchListener(new View.OnTouchListener() {
                @Override
                public boolean onTouch(View v, MotionEvent event) {
                    if (event.getAction() == MotionEvent.ACTION_DOWN) {
                        int x = (int) event.getX();
                        int y = (int) event.getY();
                    }
                    return false;
                }
            });
    
    0 讨论(0)
  • 2020-12-04 01:36

    You can use getLocationOnScreen()

    imageView.setOnClickListener(new OnClickListener() {
    
            @Override
            public void onClick(View view) {
                int[] values = new int[2]; 
                view.getLocationOnScreen(values);
                Log.d("X & Y",values[0]+" "+values[1]);
            }
        });
    

    Also, this answer of mine will be useful as well.

    0 讨论(0)
  • 2020-12-04 01:48

    Use the OnClickListener on the ImageView to receive click events, or abstract your on class from ImageView and overwrite the function "public void onTouch(MotionEvent evt)" to get X/Y coordinates from this view.

    0 讨论(0)
  • 2020-12-04 01:57

    I ended up not setting any OnClickListener on the ImageView at all. Instead I only implement "public void onTouch(MotionEvent event)" and "public void onWindowFocusChanged(boolean hasFocus)" like this:

    private int fieldImgXY[] = new int[2];
    
    @Override
    public void onWindowFocusChanged(boolean hasFocus) {
        super.onWindowFocusChanged(hasFocus);
    
        // Use onWindowFocusChanged to get the placement of
        // the image because we have to wait until the image
        // has actually been placed on the screen  before we
        // get the coordinates. That makes it impossible to
        // do in onCreate, that would just give us (0, 0).
        fieldImage.getLocationOnScreen(fieldImgXY);
        Log.i(LOG_TAG, "fieldImage lockation on screen: " + 
                xyString(fieldImgXY[0], fieldImgXY[1]));
    }
    
    public boolean onTouchEvent(MotionEvent event) {
        if (event.getAction() == MotionEvent.ACTION_DOWN) {
            Log.i(LOG_TAG, "touch event - down");
    
            int eventX = (int) event.getX();
            int eventY = (int) event.getY();
            Log.i(LOG_TAG, "event (x, y) = " + xyString(eventX, eventY));
    
            int xOnField = eventX - fieldImgXY[0];
            int yOnField = eventY - fieldImgXY[1];
            Log.i(LOG_TAG, "on field (x, y) = " + xyString(xOnField, yOnField));
        }
        return super.onTouchEvent(event);
    }
    
    0 讨论(0)
提交回复
热议问题