我有一个custom ImageView
我setBitmap()
,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;
}
非常感谢。
答案 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
}