Java ImageView getLocationtOnScreen android
我正在尝试获取屏幕上图像的坐标。我当前在活动中有一个ImageView。我知道getLocationOnScreen()方法只能在创建布局后调用,因此在oncreate函数中调用此方法将返回[0,0]。但是我不知道如何让这个方法返回正确的值。我已经尝试过隐藏各种超类方法,比如onstart方法或onTouchEvent方法,但它仍然会返回[0,0]。我目前拥有的代码如下:Java ImageView getLocationtOnScreen android,java,android,Java,Android,我正在尝试获取屏幕上图像的坐标。我当前在活动中有一个ImageView。我知道getLocationOnScreen()方法只能在创建布局后调用,因此在oncreate函数中调用此方法将返回[0,0]。但是我不知道如何让这个方法返回正确的值。我已经尝试过隐藏各种超类方法,比如onstart方法或onTouchEvent方法,但它仍然会返回[0,0]。我目前拥有的代码如下: @Override public void onCreate(Bundle savedInstanceState) {
@Override
public void onCreate(Bundle savedInstanceState)
{
// Some code here after which ..
image = (ImageView) findViewById(R.id.imageVfi);
image.setImageBitmap(imageData.entrySet().iterator().next().getValue());
}
然后我有了我已经重写的onStart方法
@Override
public void onStart()
{
super.onStart();
image.setOnTouchListener(new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
int[] dim = new int[2];
image.getLocationOnScreen(dim);
new AlertDialog.Builder(DisplayPicture.this)
.setIcon(R.drawable.icon)
.setTitle("Touch coordinates : " +
String.valueOf(dim[0]) + "x" + String.valueOf(dim[1]))
.setPositiveButton("OK",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which)
{
// TODO Auto-generated method stub
}
}).show();
// image calculations go here
return true;
}
});
}
这将返回0X0给我。非常感谢您的帮助。如果您的活动中只有图像视图,则默认情况下它将位于左上角,坐标为0x0。如果您的活动中只有图像视图,然后,默认情况下,它将位于左上角,坐标为0x0。ImageView不提供在屏幕上获取其图像位置的方法。您只能查询ImageView本身的位置。您可以尝试使用ImageView.getImageMatrix(),但我不确定当图像只是居中(与缩放等相反)时是否填充它。ImageView不提供获取其图像在屏幕上位置的方法。您只能查询ImageView本身的位置。您可以尝试使用ImageView.getImageMatrix(),但我不确定当图像只是居中(而不是缩放等)时是否填充它 解决方案: 按照下面Romain Guy提供的建议,我能够获得坐标,但在onStart overidden方法中添加了以下代码
display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
int orientation = display.getOrientation();
float rowStart=0, rowEnd=0, columnStart=0, columnEnd=0;
if(orientation ==0)
{
final Matrix matrix = image.getImageMatrix();
float[] values = new float[9];
matrix.getValues(values);
rowStart = values[0];
columnStart = values[5];
rowEnd = image.getWidth()-rowStart;
columnEnd = image.getHeight()-columnStart;
}else if(orientation == 1)
{
final Matrix matrix = image.getImageMatrix();
float[] values = new float[9];
matrix.getValues(values);
rowStart = values[2];
columnStart = values[3];
rowEnd = image.getWidth()-rowStart;
columnEnd = image.getHeight()-columnStart;
}
按照上述建议解决问题 解决方案: 按照下面Romain Guy提供的建议,我能够获得坐标,但在onStart overidden方法中添加了以下代码
display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
int orientation = display.getOrientation();
float rowStart=0, rowEnd=0, columnStart=0, columnEnd=0;
if(orientation ==0)
{
final Matrix matrix = image.getImageMatrix();
float[] values = new float[9];
matrix.getValues(values);
rowStart = values[0];
columnStart = values[5];
rowEnd = image.getWidth()-rowStart;
columnEnd = image.getHeight()-columnStart;
}else if(orientation == 1)
{
final Matrix matrix = image.getImageMatrix();
float[] values = new float[9];
matrix.getValues(values);
rowStart = values[2];
columnStart = values[3];
rowEnd = image.getWidth()-rowStart;
columnEnd = image.getHeight()-columnStart;
}
我想补充一点,我认为它将整个屏幕视为图像,因为当我调用image.getHeight()函数时,它返回800像素,image.getWidth函数返回480像素,这与屏幕分辨率相同。然而,实际可见的图像并不占据整个屏幕。你知道我如何修复这个问题吗?请注意,其余空白区域不在原始图像中。我只是意识到我在IVIEVIEW上被称为GETLooSoCon屏幕方法,而我的图像没有占据整个视图。这意味着我必须以某种方式将屏幕坐标映射到实际的图像坐标。我不知道该怎么做,我想补充一点,我认为它将整个屏幕视为图像,因为当我调用image.getHeight()函数时,它返回800像素,image.getWidth函数返回480像素,这与屏幕分辨率相同。然而,实际可见的图像并不占据整个屏幕。你知道我如何修复这个问题吗?请注意,其余空白区域不在原始图像中。我只是意识到我在IVIEVIEW上被称为GETLooSoCon屏幕方法,而我的图像没有占据整个视图。这意味着我必须以某种方式将屏幕坐标映射到实际的图像坐标。我不知道我该怎么做不,我已经使用android:scaleType=“center”将其定位在中心,因此返回的坐标不正确。我有一个临时修复方法,就是缩放图像以适应屏幕,但图像会丢失其纵横比。@k9ty尝试使用“fit center”缩放图像。然后你可以得到图像矩阵并计算屏幕上图像的大小。由此可以得到坐标=图像视图的位置+(图像视图的宽度或高度/2-图像的宽度或高度/2)。是否使用宽度或高度进行计算取决于屏幕和图像的纵横比。否,我使用android:scaleType=“center”将其定位在中心,因此返回的坐标不正确。我有一个临时修复方法,就是缩放图像以适应屏幕,但图像会丢失其纵横比。@k9ty尝试使用“fit center”缩放图像。然后你可以得到图像矩阵并计算屏幕上图像的大小。由此可以得到坐标=图像视图的位置+(图像视图的宽度或高度/2-图像的宽度或高度/2)。是否使用宽度或高度进行计算取决于屏幕和图像的纵横比。非常感谢。我能够按照建议使用getImageMatrix获得图像坐标。我在下面添加了很多解决方案。我能够按照建议使用getImageMatrix获得图像坐标。我在下面添加了我的解决方案