在不使用canvas.path的情况下在手指后绘制线条

时间:2014-04-16 21:06:32

标签: android canvas

this示例中,预定义的函数被绘制到交互式图表中。这是示例中使用的代码:

 /**
 * The simple math function Y = fun(X) to draw on the chart.
 * @param x The X value
 * @return The Y value
 */
protected static float fun(float x) {
    return (float) Math.pow(x, 3) - x / 4;
}

....

    private void drawDataSeriesUnclipped(Canvas canvas) {
        mSeriesLinesBuffer[0] = mContentRect.left;
        mSeriesLinesBuffer[1] = getDrawY(fun(mCurrentViewport.left));
        mSeriesLinesBuffer[2] = mSeriesLinesBuffer[0];
        mSeriesLinesBuffer[3] = mSeriesLinesBuffer[1];
        float x;
        for (int i = 1; i <= DRAW_STEPS; i++) {
            mSeriesLinesBuffer[i * 4 + 0] = mSeriesLinesBuffer[(i - 1) * 4 + 2];
            mSeriesLinesBuffer[i * 4 + 1] = mSeriesLinesBuffer[(i - 1) * 4 + 3];

            x = (mCurrentViewport.left + (mCurrentViewport.width() / DRAW_STEPS * i));
            mSeriesLinesBuffer[i * 4 + 2] = getDrawX(x);
            mSeriesLinesBuffer[i * 4 + 3] = getDrawY(fun(x));
        }
        canvas.drawLines(mSeriesLinesBuffer, mDataPaint);
    }

我现在想要修改此代码,这样就不会绘制预定义的函数,而是用户用手指在屏幕上绘制的路径。 (我知道我可以轻松地按照用户的手指绘制路径,之前我已经尝试过了。虽然路径被正确绘制,但它的行为并不像我想要的那样,所以我必须尝试这种方法。)

要绘制此路径,我尝试保存用户触摸的点:

switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
            firstTouchX = event.getX();
            firstTouchY = event.getY();
        case MotionEvent.ACTION_MOVE:
            lastTouchX = event.getX();
            lastTouchY = event.getY();
        case MotionEvent.ACTION_UP:
            lastTouchX = event.getX();
            lastTouchY = event.getY();
    }

 Point lastTouch = new Point();
        lastTouch.set((int)lastTouchX, (int)lastTouchY);

        pointsList.add(lastTouch);

然后我更改了fun,如果传递了x值,则返回正确的y值:

protected static float fun(float x) {


        float currX = 0;
        float currY = 0;

        for (int i = 0; i < pointsList.size(); i++) {
            Point curr = pointsList.get(i);
            currX = curr.x;
            currY = curr.y;
        }

        if (currX == x) {
            return currY;
        }

我知道这是一个非常漫长而复杂的问题,但我真的不知道还能做什么,我已经尝试了一切,但无法找到解决方案,所以如果有人可以,我会非常感激花点时间看看我的问题。

总结一下我的问题:   - 我想用手指触摸后画一条线   - 我需要在没有路径的情况下进行,但使用上述方法

0 个答案:

没有答案