我在我的活动中有一个ImageView控件,当用户触摸它时,我能够通过onTouchListener获取到他们的位置。我在触摸位置上放置了另一张图片。我需要存储触摸位置(x,y),并在另一个活动中使用它来显示标签。我将触摸位置存储在第一个活动中。在第一个活动中,我的ImageView位于屏幕顶部。在第二个活动中,它位于屏幕底部。如果我使用从第一个活动中存储的位置,则会将标签图像放置在顶部,而不是在之前在第一个活动中单击的ImageView上。有没有办法获取ImageView内的位置?
第一个活动:
在 TagImage.java 中,我使用了以下内容:
第一个活动:
cp.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
x = (int) event.getX();
y = (int) event.getY();
Log.v("touched x val of cap img >>", x + "");
Log.v("touched y val of cap img >>", y + "");
tag.setVisibility(View.VISIBLE);
int[] viewCoords = new int[2];
cp.getLocationOnScreen(viewCoords);
int imageX = x - viewCoords[0]; // viewCoods[0] is the X coordinate
int imageY = y - viewCoords[1]; // viewCoods[1] is the y coordinate
Log.v("Real x >>>",imageX+"");
Log.v("Real y >>>",imageY+"");
RelativeLayout rl = (RelativeLayout) findViewById(R.id.lay_lin);
ImageView iv = new ImageView(Capture_Image.this);
Bitmap bm = BitmapFactory.decodeResource(getResources(),
R.drawable.tag_icon_32);
iv.setImageBitmap(bm);
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
params.leftMargin = x;
params.topMargin = y;
rl.addView(iv, params);
Intent intent= new Intent(Capture_Image.this,Tag_Image.class);
Bundle b=new Bundle();
b.putInt("xval", imageX);
b.putInt("yval", imageY);
intent.putExtras(b);
startActivity(intent);
return false;
}
});
在 TagImage.java 中,我使用了以下内容:
im = (ImageView) findViewById(R.id.img_cam22);
b=getIntent().getExtras();
xx=b.getInt("xval");
yy=b.getInt("yval");
im.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
int[] viewCoords = new int[2];
im.getLocationOnScreen(viewCoords);
int imageX = xx + viewCoords[0]; // viewCoods[0] is the X coordinate
int imageY = yy+ viewCoords[1]; // viewCoods[1] is the y coordinate
Log.v("Real x >>>",imageX+"");
Log.v("Real y >>>",imageY+"");
RelativeLayout rl = (RelativeLayout) findViewById(R.id.lay_lin);
ImageView iv = new ImageView(Tag_Image.this);
Bitmap bm = BitmapFactory.decodeResource(getResources(),
R.drawable.tag_icon_32);
iv.setImageBitmap(bm);
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
30, 40);
params.leftMargin =imageX ;
params.topMargin = imageY;
rl.addView(iv, params);
return true;
}
});
int[] viewCoords = new int[2]; imageView.getLocationOnScreen(viewCoords);
获取ImageView
的屏幕坐标,然后将imageX
和imageY
添加到相应的viewCoords
值中,并将标签放置在那里。这样应该可以正常工作。 - Adam MonosimageX = x_ac1 + viewCoords[0]; int imageY = y_ac1 + viewCoords[1];
替换imageX = x_ac1 - viewCoords[0]; int imageY = y_ac1 - viewCoords[1];
,这样您就可以得到正确的坐标。 - Adam Monos