ImageView getLocationtOnScreen android

我想在屏幕上获取图像的坐标。 我目前在活动中有一个ImageView。 我知道只有在创建布局后才能调用getLocationOnScreen()方法,因此在oncreate函数中调用此方法将返回[0,0]。 但我不知道如何让这个方法返回正确的值。 我试过覆盖各种超类方法,比如onstart方法或onTouchEvent方法,它仍然向我返回[0,0]。 我目前的代码如下:

@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。 任何帮助深表感谢。

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; } 

如果它只是您活动中的图像视图,则默认情况下它将位于左上角,坐标为0x0。