2012-10-02 2 views
2

Я создаю приложение, в котором хочу получить затронутую точку на изображении. Я попытался с помощью этой ссылке:Android: Получение точки касания на ImageView

Android: how to detect touch location on ImageView if the image view is scaled by matrix?

Но я не в состоянии получить правильный прикоснулся очков.

Что я делаю неправильно?

Любая помощь была бы принята с благодарностью.

Вот мой код:

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 
      } 

ответ

2

Чтобы получить точку я успешно использовал answare вопроса вы связаны между собой. Я только что изменил 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]); 
Смежные вопросы