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;
}

basically m taking the screen shot and applying cropping on it i m selecting the cropping area using finger to draw a portion to crop . when i left moving my finger then the line appear but i want the line to follow my finger

hatib abrar
  • 123
  • 3
  • 14

1 Answers1

0

Create a customView over which you can draw the line.As it appears that this view should appear above your image then better extend it with Framelayout with same .And place it above image.

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;
}
}

Note:Don't forget to call invalidate() because it will be responsible to call onDraw

Shakeeb Ayaz
  • 6,200
  • 6
  • 45
  • 64