Java 在任何Android设备上工作的坐标

Java 在任何Android设备上工作的坐标,java,android,xml,coordinates,Java,Android,Xml,Coordinates,我想制作一个可多点触摸的ImageView。我做了一个ontouchlistener来获得触摸位置的坐标x和y,并给它每个区域的反应。它可以在1080*1960屏幕上完美工作,但对于720*1276来说,坐标会发生变化,整个过程都会出错。有什么想法吗 ImageView 部分守则 float x = motionEvent.getX(); float y = motionEvent.getY(); Str

我想制作一个可多点触摸的
ImageView
。我做了一个
ontouchlistener
来获得触摸位置的坐标
x
y
,并给它每个区域的反应。它可以在
1080*1960
屏幕上完美工作,但对于
720*1276
来说,坐标会发生变化,整个过程都会出错。有什么想法吗

ImageView

部分守则

                float x = motionEvent.getX();
                float y = motionEvent.getY();

            String message = String.format("Coordinates: (%.2f, %.2f)",x,y);
            //Toast.makeText(Study.this,message,Toast.LENGTH_SHORT).show();

            //To make the image clickable by Coordinates of touch

            if(x> 179 && x< 405  && y> 37 && y< 145 ){
                Toast.makeText(Study.this,"prep",Toast.LENGTH_SHORT).show();
            }else if (x>= 405 && x < 550 && y >= 30 && y <135){
                Toast.makeText(Study.this,"1",Toast.LENGTH_SHORT).show();
            }else if (x>= 570 && x < 684 &&y >= 49 && y < 190){
                Toast.makeText(Study.this,"2",Toast.LENGTH_SHORT).show();
            }else if (x>= 675 && x < 822 &&y >= 143 && y < 315){
                Toast.makeText(Study.this,"3",Toast.LENGTH_SHORT).show();
            }else if (x>= 757 && x < 870 &&y >= 290 && y < 447){
                Toast.makeText(Study.this,"4",Toast.LENGTH_SHORT).show();
            }else if (x>= 346 && x < 686 &&y >= 760 && y < 845){
                Toast.makeText(Study.this,"1st",Toast.LENGTH_SHORT).show();
            }else if (x>= 30 && x < 240 &&y >= 460 && y < 850){
                Toast.makeText(Study.this,"2nd",Toast.LENGTH_SHORT).show();
            }else if (x>= 240 && x < 755 &&y >= 150 && y < 750) {
            }
            return false;
float x=motionEvent.getX();
float y=motionEvent.getY();
字符串消息=String.format(“坐标:(.2f,%.2f)”,x,y);
//Toast.makeText(研究.这个,消息,Toast.LENGTH_SHORT).show();
//通过触摸坐标使图像可点击
如果(x>179&&x<405&&y>37&&y<145){
Toast.makeText(研究这个“prep”,Toast.LENGTH_SHORT).show();
}否则,如果(x>=405&&x<550&&y>=30&&y=570&&x<684&&y>=49&&y<190){
Toast.makeText(研究这个“2”,Toast.LENGTH_SHORT).show();
}如果(x>=675&&x<822&&y>=143&&y<315){
Toast.makeText(研究这个“3”,Toast.LENGTH_SHORT).show();
}如果(x>=757&&x<870&&y>=290&&y<447){
Toast.makeText(研究这个“4”,Toast.LENGTH_SHORT).show();
}否则,如果(x>=346&&x<686&&y>=760&&y<845){
Toast.makeText(研究这个“第一”,Toast.LENGTH_SHORT).show();
}如果(x>=30&&x<240&&y>=460&&y<850)则为else{
Toast.makeText(研究这个“第二”,Toast.LENGTH_SHORT).show();
}如果(x>=240&&x<755&&y>=150&&y<750),则为else{
}
返回false;

使用以下代码行获取屏幕的像素密度、像素宽度和像素高度:

public static final double SCALE = Resources.getSystem().getDisplayMetrics().density;
public static final int WIDTH = Resources.getSystem().getDisplayMetrics().widthPixels;
public static final int HEIGHT = Resources.getSystem().getDisplayMetrics().heightPixels;
现在在if语句中使用这些常量,如下所示:

if((x > WIDTH / 2 - SCALE * 50) && (x < WIDTH / 2 + SCALE * 50)  && (Y > HEIGHT/ 2 - SCALE * 50) && (Y < HEIGHT/ 2 + SCALE * 50)){ 
    Toast.makeText(Study.this,"prep",Toast.LENGTH_SHORT).show();
}
if((x>WIDTH/2-刻度*50)和&(xHEIGHT/2-刻度*50)和&(Y
如果用户要触摸屏幕上宽度为100、高度为100且居中的正方形,则上面的代码将显示烤面包片


<> p>整个设备的大小和相对位置是相同的。

你需要考虑显示器的大小和像素密度…相对坐标而非绝对坐标。对于代码的前几行,请给出以下错误错误:(32,40)错误:找不到符号变量Resources@MohamedGamal你能告诉我你把代码放进的整个类吗?这将帮助我更好地理解这个问题。@MohamedGamal请尝试getApplicationContext:
public static final double SCALE=getApplicationContext().Resources.getSystem().getDisplayMetrics().density;public static final int WIDTH=getApplicationContext().Resources.getSystem().getDisplayMetrics().widthPixels;公共静态最终整数高度=getApplicationContext().Resources.getSystem().getDisplayMetrics().heightPixels@MohamedGamal抱歉,我不知道如何进一步帮助您。谢谢您的尝试:)顺便说一句,我使用此代码修复了它