2015-09-04 78 views
1

我正在嘗試製作一個應用程序,用戶單擊圖像。 點擊圖片後,會出現3個矩形,可以根據圖片中的文字進行移動和調整大小。Android中的可調整大小的矩形覆蓋

所以我的問題是如何使這3個矩形在視圖從圖像的一部分選擇文本

請幫我做出這個問題

回答

0

它不正是你想要的解決方案,但這個例子顯示如何繪製一個單一的矩形超過ImageView和縮放/移動它:

public class OverlayImageView extends ImageView { 

    private static final int INVALID_POINTER_ID = -1; 

    private float mPosX; 
    private float mPosY; 

    private float mLastTouchX; 
    private float mLastTouchY; 
    private int mActivePointerId = INVALID_POINTER_ID; 

    private ScaleGestureDetector mScaleDetector; 
    private float mScaleFactor = 1.f; 

    private Rect mInitialRect; 
    private Paint mDrawPaint; 

    public OverlayImageView(Context context) { 
     this(context, null, 0); 
    } 

    public OverlayImageView(Context context, AttributeSet attrs) { 
     this(context, attrs, 0); 
    } 

    public OverlayImageView(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
     mScaleDetector = new ScaleGestureDetector(context, new ScaleListener()); 

     mDrawPaint = new Paint(); 
     mDrawPaint.setColor(Color.RED); 
     mDrawPaint.setStyle(Paint.Style.STROKE); 
     mDrawPaint.setStrokeWidth(5); 
     mInitialRect = new Rect(10, 10, 100, 100); 
    } 

    @Override 
    public boolean onTouchEvent(@NonNull MotionEvent ev) { 
     // Let the ScaleGestureDetector inspect all events. 
     mScaleDetector.onTouchEvent(ev); 

     final int action = ev.getAction(); 
     switch (action & MotionEvent.ACTION_MASK) { 
      case MotionEvent.ACTION_DOWN: { 
       final float x = ev.getX(); 
       final float y = ev.getY(); 

       mLastTouchX = x; 
       mLastTouchY = y; 
       mActivePointerId = ev.getPointerId(0); 
       break; 
      } 

      case MotionEvent.ACTION_MOVE: { 
       final int pointerIndex = ev.findPointerIndex(mActivePointerId); 
       final float x = ev.getX(pointerIndex); 
       final float y = ev.getY(pointerIndex); 

       // Only move if the ScaleGestureDetector isn't processing a gesture. 
       if (!mScaleDetector.isInProgress()) { 
        final float dx = x - mLastTouchX; 
        final float dy = y - mLastTouchY; 

        mPosX += dx; 
        mPosY += dy; 

        invalidate(); 
       } 

       mLastTouchX = x; 
       mLastTouchY = y; 

       break; 
      } 

      case MotionEvent.ACTION_UP: { 
       mActivePointerId = INVALID_POINTER_ID; 
       break; 
      } 

      case MotionEvent.ACTION_CANCEL: { 
       mActivePointerId = INVALID_POINTER_ID; 
       break; 
      } 

      case MotionEvent.ACTION_POINTER_UP: { 
       final int pointerIndex = (ev.getAction() & MotionEvent.ACTION_POINTER_INDEX_MASK) 
         >> MotionEvent.ACTION_POINTER_INDEX_SHIFT; 
       final int pointerId = ev.getPointerId(pointerIndex); 
       if (pointerId == mActivePointerId) { 
        // This was our active pointer going up. Choose a new 
        // active pointer and adjust accordingly. 
        final int newPointerIndex = pointerIndex == 0 ? 1 : 0; 
        mLastTouchX = ev.getX(newPointerIndex); 
        mLastTouchY = ev.getY(newPointerIndex); 
        mActivePointerId = ev.getPointerId(newPointerIndex); 
       } 
       break; 
      } 
     } 

     return true; 
    } 

    @Override 
    public void onDraw(@NonNull Canvas canvas) { 
     super.onDraw(canvas); 

     canvas.save(); 
     canvas.translate(mPosX, mPosY); 
     canvas.scale(mScaleFactor, mScaleFactor); 
     canvas.drawRect(mInitialRect, mDrawPaint); 
     canvas.restore(); 
    } 

    private class ScaleListener extends ScaleGestureDetector.SimpleOnScaleGestureListener { 
     @Override 
     public boolean onScale(ScaleGestureDetector detector) { 
      mScaleFactor *= detector.getScaleFactor(); 

      // Don't let the object get too small or too large. 
      mScaleFactor = Math.max(0.1f, Math.min(mScaleFactor, 10.0f)); 

      invalidate(); 
      return true; 
     } 
    } 
} 
+0

感謝您的幫助。我已經做了矩形,但我想要三個矩形可聚焦,當我試圖添加這些矩形一個是可以聚焦和其他兩個不能正常工作。幫助,如何添加兩個可調整大小的矩形。 – Corrupt

+0

@Corrupt你可以存儲矩形的數組,並在onTouchEvent中檢測哪一個位於MotionEvent中。在onDraw方法中繪製每個矩形縮放。 – Oleksandr

相關問題