java - 从最后一行的终点开始新行

标签 java android

我在一个 Android 应用程序中创建了 Canvas ,您可以在其中画出跟随手指的线条。在那一点上一切正常,但我想从最后一行的端点坐标开始新行。

我想我可以把最后一行的结束坐标放在新行的 action down 事件中,但那样就没有第一行的坐标,否则它不知道从哪里开始

目前我的代码是这样的,这只是线条,没有连接。这在某种程度上什至可能吗?

    protected float mStartX;
    protected float mStartY;

    protected float mx;
    protected float my;

    private void drawLine(android.graphics.Canvas canvas) {

        float dx = Math.abs(mx - mStartX);
        float dy = Math.abs(my - mStartY);
        if (dx >= TOUCH_TOLERANCE || dy >= TOUCH_TOLERANCE) {
            canvas.drawLine(mStartX, mStartY, mx, my, mPaint);
        }
    }

    private void lineDrawEvent(MotionEvent event) {
        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                isDrawing = true;
                mStartX = mx;
                mStartY = my;
                invalidate();
                break;
            case MotionEvent.ACTION_MOVE:
                invalidate();
                break;
            case MotionEvent.ACTION_UP:
                isDrawing = false;
                mCanvas.drawLine(mStartX, mStartY, mx, my, mPaintFinal);
                invalidate();
                break;
        }
    }

最佳答案

是的,可能只是存储最后一行的结束点以用作下一行的开始,正如您自己所说的。

如果您已经有了起点,您需要做的是更改ACTION_DOWN 的行为

类似的东西:-

protected float mStartX;
protected float mStartY;

protected float mx;
protected float my;

private void drawLine(android.graphics.Canvas canvas) {

    float dx = Math.abs(mx - mStartX);
    float dy = Math.abs(my - mStartY);
    if (dx >= TOUCH_TOLERANCE || dy >= TOUCH_TOLERANCE) {
        canvas.drawLine(mStartX, mStartY, mx, my, mPaint);
    }
}

private void lineDrawEvent(MotionEvent event) {
    switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
            isDrawing = true;
            // If this is the first line then the start values will be
            // uninitialised, so only use them for the start of the first line
            // Otherwise they will be set by the previous UP event
            if (mStartX == null && mStartY == null) {
              mStartX = mx;
              mStartY = my;
            }
            invalidate();
            break;
        case MotionEvent.ACTION_MOVE:
            invalidate();
            break;
        case MotionEvent.ACTION_UP:
            isDrawing = false;
            mCanvas.drawLine(mStartX, mStartY, mx, my, mPaintFinal);
            // Set the Start point of the next line to end of current
            mStartX = mx;
            mStartY = my;
            invalidate();
            break;
    }
}

您可能还想将每个点也添加到配对对象列表中,这样您就可以在之后对线做一些事情。

关于java - 从最后一行的终点开始新行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58670710/

相关文章:

java - 用水平线分隔 JTable 中的实例

java - 使用 AtomicReference 的单例

java - 工厂方法模式返回 void

android - NoSuchMethodError :com. android.app.fragment getContext 在 android

java - 如何在特定情况下捕获OnTouchEvent?

java - 在 Java 中旋转缓冲图像

android - Android TableLayout 中的按钮宽度

java - 滑动加载到 SimpleTarget<Bitmap> 中不遵守指定的宽度和高度

android 数据存储首选项 : Property delegate must have a 'getValue(Context, KProperty<*>)' method

Android:Paging3:重复项