2016-09-09 9 views
1

のために私は私が必要なものを、キャンバスのテキストは、-45度の回転でのDrawTextメソッドを使用して描画されていだけでそのテキスト部分のタッチアクションで、REFのイメージは以下の通りです、 enter image description hereAndroidのキャンバスOnDrawタッチリスナー回転されたテキスト

マイコードは、私はラインタッチイベントを検出したが、テキストのタッチイベントを検出することができないことができ

@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); 
    } 
} 

を下回っています。これを解決するのに役立ちます。

答えて

0

最初に、アフィン変換をevent.getX()、even.getY()ポイントに適用する必要があります。次に、回転していないかのように、テキストの周囲の矩形にこの新しい変換点が含まれているかどうかを確認します。 Java: Rotate Point around another by specified degree value

:いくつかの中心の周りのポイントを翻訳

関連する問題