2016-08-01 67 views
1
public boolean onTouchEvent(MotionEvent event) { 
    //Log.e(Codistan_Tag, "Touch Event: " + MotionEvent.actionToString(event.getAction())); 
    if(isImageReady) { 

     if(isSelectionDragEnabled) 
      mPanListener.onTouchEvent(event); 

     if (isZoomEnabled) { 
      if(event.getAction() == MotionEvent.ACTION_DOWN){ 
       anchor_scale = mScaleFactor; 
      } 
      mScaleDetector.onTouchEvent(event); 
      mPanListener.onTouchEvent(event); 
     } 
     else { 
      switch (event.getAction()) { 
       case MotionEvent.ACTION_POINTER_3_DOWN: 
        break; 
       case MotionEvent.ACTION_POINTER_2_DOWN: 
        break; 
       case MotionEvent.ACTION_POINTER_1_UP: 

        break; 
       case MotionEvent.ACTION_DOWN: 

        if (isSelectionToolEnabled) 
         isDrawFinished = false; 

        orig_x = event.getX(); 
        orig_y = event.getY(); 

        //Log.e(Codistan_Tag, "-------ORIGIN-------s: " + String.valueOf(orig_x) + " " + String.valueOf(orig_y)); 

        orig_x = (orig_x - (dest.left)); 
        orig_y = (orig_y - (dest.top)); 

        if(java.lang.Math.round(mScaleFactor) > 2) { 
         orig_x += (scale_cur_x * (riz_scale)); 
         orig_y += (scale_cur_y * (riz_scale)); 
        } else { 
         orig_x += (scale_cur_x); 
         orig_y += (scale_cur_y); 
        } 

        orig_x /= java.lang.Math.round(mScaleFactor); 
        orig_y /= java.lang.Math.round(mScaleFactor); 

        orig_x *= scale; 
        orig_y *= scale; 

        //mSelectionTaskManager.setOrigin((int) orig_x, (int) orig_y); 
        if(isSelectionToolEnabled) 
         MovementStack.add(new Pair((int)orig_x, (int)orig_y)); 

        Log.e(Codistan_Tag, "Codistan Origins: " + String.valueOf(orig_x) + ", " + String.valueOf(orig_y)); 

        break; 
       case MotionEvent.ACTION_MOVE: 
        max_dist = dist * scale; 

        if (event.getAction() != 1) { 
         move_x = event.getX(); 
         move_y = event.getY(); 

         //Log.e(Codistan_Tag, "Move: " + String.valueOf(move_x) + ", " + String.valueOf(move_y)); 

         move_x = (move_x - dest.left); 
         move_y = (move_y - dest.top); 



         if(java.lang.Math.round(mScaleFactor) > 2) { 
          move_x += (scale_cur_x * riz_scale); 
          move_y += (scale_cur_y * riz_scale); 
         } else { 
          move_x += (scale_cur_x); 
          move_y += (scale_cur_y); 
         } 

         move_x /= java.lang.Math.round(mScaleFactor); 
         move_y /= java.lang.Math.round(mScaleFactor); 

         move_x *= scale; 
         move_y *= scale; 

         Log.e(Codistan_Tag, "Codistan Move: " + String.valueOf(move_x) + ", " + String.valueOf(move_y)); 

         if (move_x >= 0 && move_y >= 0) { 
          if (!isSelectionToolEnabled && isDistortionEnabled) { 
           warpPhotoFromC(image, height, width, max_dist/mScaleFactor, orig_x, orig_y, move_x, move_y); 
           first++; 
           distortedBmp.setPixels(image, 0, width, 0, 0, width, height); 
           fg = false; 
          } else { 
           //Cut Tool Enabled 
           distortedBmp.setPixels(image, 0, width, 0, 0, width, height); 
           MovementStack.add(new Pair((int) move_x, (int) move_y)); 

          } 
         } 
        } 
        orig_x = move_x; 
        orig_y = move_y; 
        break; 
       case MotionEvent.ACTION_UP: 
        if (isSelectionToolEnabled) 
         isDrawFinished = true; 
        break; 
      } 
     } 
     v.invalidate(); 
    } 
    return true; 
} 

基本上是拍攝屏幕截圖並在其上應用裁剪我用手指選擇裁剪區域以繪製一部分進行裁剪。當我離開我的手指移動然後行出現,但我想要的行跟着我的手指我想跟隨手指畫線

+1

可能的複製http://stackoverflow.com/問題/ 4300399/android-drawing-a-line-to-follow-your-finger?rq = 1 – antorqs

+0

沒有m在屏幕截圖上畫線我已經看到這個,但沒有幫助 –

回答

0

創建一個自定義視圖,您可以繪製line.As似乎這個視圖應該出現在圖像上方,然後更好地擴展它與Framelayout相同。並將其放在圖片上方。

FingerLine.class

public class FingerLine extends FrameLayout { 
private final Paint mPaint; 
private float startX; 
private float startY; 
private float endX; 
private float endY; 

public FingerLine(Context context) { 
    this(context, null); 
} 

public FingerLine(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); 
    mPaint.setStyle(Style.STROKE); 
    mPaint.setColor(Color.RED); 
} 

@Override protected void onDraw(Canvas canvas) { 
    super.onDraw(canvas); 
    canvas.drawLine(startX, startY, endX, endY, mPaint); 
} 

@Override 
public boolean onTouchEvent(@NonNull MotionEvent event) { 
    switch (event.getAction()) { 
     case MotionEvent.ACTION_DOWN: 
      startX = event.getX(); 
      startY = event.getY(); 
      invalidate(); 
      break; 
     case MotionEvent.ACTION_MOVE: 
      endX = event.getX(); 
      endY = event.getY(); 
      invalidate(); 
      break; 
     case MotionEvent.ACTION_UP: 
      endX = event.getX(); 
      endY = event.getY(); 
      invalidate(); 
      break; 
    } 
    return true; 
} 
} 

注意:不要忘記調用無效(),因爲它負責調用的onDraw