2

画像のタッチポイントを取得したいアプリを作っています。このリンクを使用してみました:

Android:画像ビューがマトリックスでスケーリングされている場合、ImageViewのタッチ位置を検出する方法は?

しかし、私は正しい接触点を得ることができません。

私が間違っていることは何ですか?

どんな助けでも大歓迎です。

これが私のコードです:

public boolean onTouch(View v, MotionEvent event) {
                v.onTouchEvent(event);




                matrix.getValues(m);
                float x = m[Matrix.MTRANS_X];
                float y = m[Matrix.MTRANS_Y];
                PointF curr = new PointF(event.getX(), event.getY());

                switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN:
                    last.set(event.getX(), event.getY());
                    EventX=event.getX();
                    EventY=event.getY();
                    Log.d("ImageX"+event.getX(), "ImageY"+event.getY());
                    start.set(last);
                    mode = DRAG;
                    PosterActivity.isTouched=false;

                    break;
                case MotionEvent.ACTION_MOVE:
                    // Log.i("onTouch", "origWidth : " + origWidth +
                    // " origHeight : " + origHeight);
                    if (mode == DRAG) {
                        deltaX= curr.x - last.x;
                        Log.d("deltaX",""+deltaX);

                        deltaY = curr.y - last.y;
                        Log.d("deltay",""+deltaY);
                        scaleWidth = Math.round(origWidth * saveScale);
                        scaleHeight = Math.round(origHeight * saveScale);
                        if (scaleWidth < width) {
                            deltaX = 0;
                            if (y + deltaY > 0)
                                deltaY = -y;
                            else if (y + deltaY < -bottom)
                                deltaY = -(y + bottom);
                        } else if (scaleHeight < height) {
                            deltaY = 0;
                            if (x + deltaX > 0)
                                deltaX = -x;
                            else if (x + deltaX < -right)
                                deltaX = -(x + right);
                        } else {
                            if (x + deltaX > 0)
                                deltaX = -x;
                            else if (x + deltaX < -right)
                                deltaX = -(x + right);

                            if (y + deltaY > 0)
                                deltaY = -y;
                            else if (y + deltaY < -bottom)
                                deltaY = -(y + bottom);
                        }
                        matrix.postTranslate(deltaX, deltaY);
                        last.set(curr.x, curr.y);
                        PosterActivity.isTouched=true;

                    }
                    break;

                case MotionEvent.ACTION_UP: {
                    mode = NONE;
                    int xDiff = (int) Math.abs(curr.x - start.x);
                    int yDiff = (int) Math.abs(curr.y - start.y);
                    if (xDiff < CLICK && yDiff < CLICK) {
                        Log.v("ACTION_UP", "ACTION_UP");
                        mPosX = curr.x;
                        mPosY = curr.y;

                        PosterActivity.isTouched=true;
                        performClick();

                    }
                    //setImageMatrix(matrix);
                    //invalidate();
                    break;
                }
                case MotionEvent.ACTION_POINTER_UP:
                    mode = NONE;
                    break;
                }
                setImageMatrix(matrix);
                invalidate();
                return true; // indicate event was handled
            }
4

2 に答える 2

2

ポイントを取得するために、リンクした質問の回答をうまく使用しました。getX() と getY() を getRawX() と getRawY() に変更しました

このコードサンプルで試してください

  // calculate inverse matrix
  Matrix inverse = new Matrix();
  matrix.invert(inverse);
  // map touch point from ImageView to image
  float[] touchPoint = new float[] {event.getRawX(), event.getRawY()};
  inverse.mapPoints(touchPoint);
  // touchPoint now contains x and y in image's coordinate system    
  Log.d(TAG, "touch coords="+touchPoint[0] + " - " + touchPoint[1]);
于 2013-02-03T16:17:34.143 に答える