Android Canvas OnDraw Touch Listener для повернутого текста

У меня есть текст на холсте, нарисованный с использованием метода drawText с вращением на -45 градусов, мне нужно сенсорное действие только для этой текстовой части, эталонное изображение ниже, введите здесь описание изображения

Мой код ниже

@Override
protected void onDraw(Canvas canvas)
{
    super.onDraw(canvas);

    Paint newpaint=new Paint();

    newpaint.setColor(Color.RED);

    canvas.drawLine(10,10,getMeasuredWidth(),10,newpaint);

    if(lines.size()>0)
    {
        Paint BluePaint=new Paint();

        BluePaint.setColor(Color.BLUE);

        BluePaint.setStrokeWidth(1.5f);

        for (Line l : lines)
        {
            canvas.drawLine(l.startX, l.startY, l.stopX, l.stopY+50, BluePaint);
            canvas.save();
            canvas.rotate((float) (-45), l.startX, l.stopY+160);
            canvas.drawText("Add Location",l.startX-10,l.stopY+90,BluePaint);
            canvas.restore();

        }
    }

}

@Override
public boolean onTouchEvent(MotionEvent event)
{
    float x = event.getX();
    float y = event.getY();
    switch(event.getAction())
    {
        case MotionEvent.ACTION_DOWN:
            //Check if the x and y position of the touch is inside the bitmap
            if( x > bitmapXPosition && x < bitmapXPosition + getMeasuredWidth() && y > bitmapYPosition && y < bitmapYPosition + 5 )
            {
                lines.add(new Line(event.getX(), event.getY()));

                invalidate();

                return true;
            }
    }
    return false;

}

class Line {
    float startX, startY, stopX, stopY;
    public Line(float startX, float startY, float stopX, float stopY) {
        this.startX = startX;
        this.startY = startY;
        this.stopX = stopX;
        this.stopY = stopY;
    }
    public Line(float startX, float startY) { // for convenience
        this(startX, startY, startX, startY);
    }
}

Я обнаружил событие касания строки, но не могу обнаружить событие касания текста. Помогите решить это.


person Brendon    schedule 09.09.2016    source источник


Ответы (1)


Сначала вам нужно применить аффинное преобразование к точке event.getX(),even.getY(). Затем проверьте, содержит ли прямоугольник вокруг текста эту новую преобразованную точку, как если бы она не была повернута.

Перемещение точки вокруг некоторого центра: Java: повернуть точку вокруг другого на указанное значение степени

person Timur    schedule 13.09.2016