我想跟随手指画线

时间:2016-08-01 09:00:05

标签: android

 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 个答案:

答案 0 :(得分:0)

创建一个自定义视图,您可以在其上绘制线条。由于看起来此视图应显示在图像上方,然后使用相同的框架布局更好地扩展它。并将其放置在图像上方。

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

注意:不要忘记调用invalidate(),因为它将负责调用onDraw