【问题标题】:how to draw an arrow in android touch event?如何在android触摸事件中绘制箭头?
【发布时间】:2012-11-14 03:18:51
【问题描述】:

如何在android触摸事件中绘制箭头?

我正在尝试绘制单独的直线和箭头。如何将箭头设置在正确的位置?

currentDrawingPath1.path.lineTo(motionEvent.getX()+5, motionEvent.getY());
currentDrawingPath1.path.lineTo(motionEvent.getX()-5, motionEvent.getY());
currentDrawingPath1.path.lineTo(motionEvent.getX(), motionEvent.getY());

上面的代码是画一个箭头。

【问题讨论】:

  • 来点三角函数怎么样?
  • 如果我理解你的问题,你想在屏幕上拖动手指后画一个箭头。好吧,您可以在移开手指时(从 event.ACTION_UP 中)将箭头路径添加到最后注册的 x,y 位置。最后一个问题是头部箭头根据线方向旋转。为此,您必须计算线的角度。它可以通过考虑第一个和最后一个接触点来计算。看这里:stackoverflow.com/questions/2676719/…

标签: java android path android-canvas


【解决方案1】:

我在下面的代码中试过这个。这对我有用,

enter code here


switch (event.getAction())
{
   case MotionEvent.ACTION_DOWN:
        mPath.reset();
    mPath.moveTo(x, y);
        mX = x;
        mY = y;
        startPoint = new PointF(event.getX(), event.getY());
        endPoint = new PointF();
        invalidate();

     //   isDrawing = true;
        break;
    case MotionEvent.ACTION_MOVE:
            float dx = Math.abs(x - mX);
        System.out.println("action move");
        float dy = Math.abs(y - mY);
        if (dx >= TOUCH_TOLERANCE || dy >= TOUCH_TOLERANCE)
        {
        //  currentDrawingPath.path.quadTo(mX,mY,(x + mX)/2, (y + mY)/2);
        }
        mX = x;
        mY = y;
          endPoint.x = event.getX();
            endPoint.y = event.getY();
          isDrawing = true;

          invalidate();
        break;
    case MotionEvent.ACTION_UP:
           mPath.lineTo(mX, mY);
float deltaX =   endPoint.x-startPoint.x;
           float deltaY =   endPoint.y-startPoint.y;
           float frac = (float) 0.1;

           float point_x_1 = startPoint.x + (float) ((1 - frac) * deltaX + frac * deltaY);
           float point_y_1 = startPoint.y + (float) ((1 - frac) * deltaY - frac * deltaX);

           float point_x_2 = endPoint.x;
           float point_y_2 = endPoint.y;

           float point_x_3 = startPoint.x + (float) ((1 - frac) * deltaX - frac * deltaY);
           float point_y_3 = startPoint.y + (float) ((1 - frac) * deltaY + frac * deltaX);



           mPath.moveTo(point_x_1, point_y_1);
           mPath.lineTo(point_x_2, point_y_2);
           mPath.lineTo(point_x_3, point_y_3);
           mPath.lineTo(point_x_1, point_y_1);
           mPath.lineTo(point_x_1, point_y_1);

            mCanvas.drawPath(mPath, ppaint);
            endPoint.x = event.getX();
            endPoint.y = event.getY();
            isDrawing = false;

            invalidate();
        break;
    default:
        break;
}       

【讨论】:

    猜你喜欢
    • 2012-04-03
    • 1970-01-01
    • 1970-01-01
    • 2011-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多