5

我的活动中有一个 imageview,我可以通过 onTouchListener 获得用户触摸 imageview 的位置。我在用户触摸该图像的位置放置了另一个图像。我需要存储触摸位置(x,y),并在另一个活动中使用它来显示标签。我将触摸位置存储在第一个活动中。在第一个活动中,我的图像视图位于屏幕顶部。在第二个活动中,它位于屏幕底部。如果我使用从第一个活动存储的位置,它将标签图像放在顶部,而不是在我之前在第一个活动中单击的图像视图上。无论如何要在imageview中获得位置。

第一活动:

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;

    }
});
4

2 回答 2

22

您可以获得视图的左上角,如下所示:

int[] viewCoords = new int[2];
imageView.getLocationOnScreen(viewCoords);

根据这个和触摸坐标,您可以计算 ImageView 内的点:

int touchX = (int) event.getX();
int touchY = (int) event.getY();

int imageX = touchX - viewCoords[0]; // viewCoords[0] is the X coordinate
int imageY = touchY - viewCoords[1]; // viewCoords[1] is the y coordinate
于 2012-07-03T13:51:13.287 回答
0

将这些行添加到 ImageView

android:scaleType="fitXY" 

android:adjustViewBounds="true"

到您的图像视图,这是因为图像在 IV 中没有原始尺寸

于 2019-08-22T07:13:31.490 回答