在ImageView中获取Bitmap的特定真实坐标

时间:2016-06-08 08:49:40

标签: android android-layout bitmap android-drawable

我有一个custom ImageViewsetBitmap()Bitmaps都有dimensions of 800x600

我设置触摸事件,我在视图顶部绘制矩形,稍后我想采取这些矩形坐标并将它们发送回服务器进行更新。

问题是 event.getX event.getY 会返回相对/可能缩放的坐标(尺寸为2000 * 1700的某处)

我希望获得真正的位图坐标。

定义视图的xml

<com.example.tombushmits.drawtesting.DrawbleImageView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/imageView"
    android:background="@drawable/border"
    android:scaleType="fitCenter"
    />

以及我custom ImageView中的 onTouch

switch(event.getAction()){
            case MotionEvent.ACTION_DOWN:
                if(rec_list.size()<5) {
                    drawRectangle = true;
                    xTop = event.getX();
                   yTop = event.getY();
                   xBottom = event.getX();
                   yBottom = event.getY();
//                    float x = event.getRawX();
//                    float y = event.getRawY();
//                    truex= (x-location[0])*width_ratio;
//                    truey = (y-location[1])*height_ratio;
//
                   invalidate();


               }
                break;
            case MotionEvent.ACTION_MOVE:
                if(rec_list.size() <5) {
                    xBottom = event.getX();
                    yBottom = event.getY();
                    invalidate();
                }
                break;
            case MotionEvent.ACTION_UP:
//ignore
//                truex_end = (event.getX()-location[0])*width_ratio;
//                truey_end = (event.getY()- location[1])*height_ratio;
                if(rec_list.size() < 5) {
                    drawRectangle = false;

                    rec_list.add(new Rect((int) xTop, (int) yTop, (int) xBottom, (int) yBottom));
                    true_rec_list.add(new Rect((int)truex,(int)truey,(int)truex_end,(int)truey_end));
                    invalidate();

                }
                break;
        }
        return true;
    }
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        if(clear)
        {
            canvas.drawRect(0,0,0,0,paint);
            rec_list.clear();
            clear =false;
            return;

        }
        for(Rect rect:rec_list)
            canvas.drawRect(rect, paint);
        if(drawRectangle)
            canvas.drawRect(xTop, yTop, xBottom, yBottom, paint);

    }

    public ArrayList<Rect> returnRecs(){
//        return this.rec_list;
        return this.true_rec_list;
    }
非常感谢。

1 个答案:

答案 0 :(得分:0)

您应该能够通过onTouch中的View.getLocationOnScreen()方法获取ImageView的坐标。这将为您提供左上角坐标。由于您知道位图的大小,因此可以计算出您可能需要的任何其他坐标。

@Override
public boolean onTouch(View v, MotionEvent event) {
    int[] location = new int[2];
    v.getLocationOnScreen(location);
    // location array now has x and y coordinates
}