Android 在自定义ImageView中绘制位图,并获取ImageView的坐标,而不考虑设备

Android 在自定义ImageView中绘制位图,并获取ImageView的坐标,而不考虑设备,android,canvas,coordinates,draw,android-custom-view,Android,Canvas,Coordinates,Draw,Android Custom View,我想获得图像视图的坐标,与设备大小无关 有没有可能的办法 我试图为图像视图创建特定的大小,甚至为父视图创建特定的大小,但它不起作用 Matrix m = imageview.getImageMatrix(); 我试过以下几种可能的方法 int[] posXY = new int[2]; imageview.getLocationOnScreen(posXY); int MoveX = posXY[0]; int MoveY = posXY[1]; 我也尝试过Matrix,但不起作用 Matr

我想获得
图像视图
的坐标,与设备大小无关

有没有可能的办法

我试图为
图像视图
创建特定的大小,甚至为
父视图
创建特定的大小,但它不起作用

Matrix m = imageview.getImageMatrix();
我试过以下几种可能的方法

int[] posXY = new int[2];
imageview.getLocationOnScreen(posXY);
int MoveX = posXY[0];
int MoveY = posXY[1];
我也尝试过Matrix,但不起作用

Matrix m = imageview.getImageMatrix();
尝试了下面的代码,但它也不工作

我需要为同一点(位置)的所有设备获得相同的{x,y}坐标

以下是绘制方法:

如果我在draw中设置位图图像,它不适合每个设备的屏幕。若我将图像设置为显示宽度和高度,则得到的坐标不同

 @Override
    public void draw(Canvas canvas) {
        // TODO Auto-generated method stub
        super.draw(canvas);

        Resources res = getResources();
        Drawable drawable = res.getDrawable(R.drawable.subimage);
        mBitmap = ((BitmapDrawable) drawable).getBitmap();     
        canvas.drawBitmap(mBitmap, 0, 0, null);

    }
任何想法或帮助都会非常有用。

你可以试试这个

imageview.post(new Runnable() {
            @Override
            public void run() {
                int[] posXY = new int[2];
                imageview.getLocationOnScreen(posXY);
                int MoveX = posXY[0];
                int MoveY = posXY[1];
Log.i("xy co-ordinate", "x "+MoveX, "y"+MoveY);

            }
        });

你必须先计算你的设备屏幕比例

deviceWidth / screenHeight = ratio
然后必须将其与所需坐标相乘:

ratio * xCoord = newXcoord; // and same for Y coord
通过这样做,您将保持所有设备尺寸的等效坐标

您还可以声明屏幕尺寸%的大小和坐标,如:

x = 0.2 * deviceWidth  // %20 of device width from left

最终找到了一些相对的解决方案,所有设备的坐标相同。使用活动,没有自定义的图像视图

在ImageView上点击

 public boolean onTouch(View v, MotionEvent event) {
    int action = event.getAction();
      final int index = e.getActionIndex();
      final float[] coords = new float[] {
              e.getX(index), e.getY(index)
      };
      Matrix matrix = new Matrix();
      choosenImageView.getImageMatrix().invert(matrix);
      matrix.mapPoints(coords);
    return true;
  }
使用画布绘制

        Resources res = getResources();
        Drawable drawable = res.getDrawable(R.drawable.image);

        Bitmap bmp= ((BitmapDrawable) drawable).getBitmap();

        alteredBitmap = Bitmap.createBitmap(bmp.getWidth(), bmp.getHeight(), bmp.getConfig());
        canvas = new Canvas(alteredBitmap);
        paint = new Paint();
        paint.setColor(Color.GREEN);
        paint.setStrokeWidth(5);
        matrix = new Matrix();
        canvas.drawBitmap(bmp, matrix, paint);

您使用哪种方法调用了
imageview.getLocationOnScreen(posXY)?使用
getImageMatrix
并仔细阅读
Matrix
API@pskink您好,请检查我的更新问题您是否阅读了
Canvas
API?您是否阅读了我发布的链接?您看到表1了吗?如果是,您是否阅读了所有
*dpi
限定符?