2013-05-06 4 views
0

나는 성공적으로 만든 리사이징 터치 뷰를 만들려고합니다. 코드 How to make view resizable on touch event을 찾을 수 있습니다.안드로이드 안드로이드에서 새로운 점을 얻으십시오

네 모서리가 있습니다. 모서리 중 하나를 드래그하여 해당 사각형의 크기를 조정할 수 있습니다. 하지만 지금은 그 논리를 향상시키고 그 코드에 회전을 넣고 싶습니다. 사용자가 직사각형 모서리 중 하나의 중심에 터치하면 성공적으로 각도를 찾습니다. 하지만 이제 문제는 모서리의 새로운 위치를 얻을 수 없어 사각형을 다시 그릴 수 있고 회전이 가능하다는 것입니다.

질문 : 각도를 기준으로 4 코너 새 위치를 계산하려면 어떻게해야합니까?.

답변

0

회전 각도를 알고 있으면 사각형의 꼭지점을 계산할 필요가 없습니다. 간단한 방법은 당신이 생각하는 것보다 아마도 더 간단 ... 그건 내가 알 수있는 바와 같이, 당신은 회전 각도에 따라 새로운 좌표를 계산 할뿐만

@Override 
     protected void onDraw(Canvas canvas) { 
      super.onDraw(canvas); 
      canvas.save(); 
      canvas.rotate(60.0f); 

      paint.setColor(Color.BLACK); 
      paint.setStyle(Paint.Style.STROKE); 

      canvas.drawRect(10, 10, 100, 100, paint); 
      canvas.restore(); 
     } 
+0

나는 그 시나리오가 캔버스를 회전시키는 것을 안다. 그러나 그 후에 포인트는 그들의 옛 장소에 있었다. 다음에 나는 캔버스에 4 코너 포인트의 새로운 장소를 찾을 수 없습니다. 이건 내 친구를 작동하지 않습니다. –

0

아래에있을 것입니다해야 할 일 :

x' = x × (cosα - sinα) 
y' = y × sinα × cosα 

따라서 x'x의 회전 결과이고 y'y의 경우와 α이 회전 각도 인 경우를 고려하여 프로그래밍 방식으로이 방법을 적용하면됩니다. 자바에서 모든 삼각 함수 각도로 라디안이 아니라도 사용하기 때문에이 고려할 수 :

cosαsinα 기능 Math.cos(α)Math.sin(α)하지만 관심 자바에서 사용할 수있는 rad = deg * 180/π 적용과 같이

double deg = 45d; //Put instead your degrees 
double rad = deg/180 * Math.PI; //The radians convertion 
관련 문제