2012-01-20 2 views
0

타블렛 용 포인터에 문제가 있습니다. 나는 예술 앱을 디자인하고 있는데 내 움직임을 대칭 (대칭)하는 법을 알아 내려고하고있다. 현재 손가락이나 스타일러스로 화면을 터치하면 이미지 (프로그래밍 방식으로 생성 된 원)가 그려지고 손가락/스타일러스를 움직일 때마다 그 자체가 업데이트됩니다. 이것은 완벽하게 작동합니다. 그러나 이제는 두 가지 새로운 기능을 추가하려고합니다 : 가로 및 세로 대칭. 따라서 수평 대칭을 선택하면 반대쪽 X 위치에 동일한 Y 축을 따라 다른 포인터가 나타납니다. 따라서 300x, 250y로 터치하면 다른 포인터가 원래 포인터와 함께 화면의 -300x, 250y에 표시됩니다. 이제 적용하고 테스트하려고 시도했지만 여전히 원래 포인터 만 가져옵니다.Android : 터치 감추는 방법? (시각적 포인터 문제)

rLO.setOnTouchListener(new View.OnTouchListener() { 

    @Override 
    public boolean onTouch(View v, MotionEvent event) { 

     switch (event.getAction() & MotionEvent.ACTION_MASK) { 

     case MotionEvent.ACTION_DOWN:    

      // Hardware accelerated at runtime 
      getWindow().setFlags(
        WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED, 
        WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED); 
      cursor.x = (int)event.getX() - (cursor.radius/2); 
      cursor.y = (int)event.getY() - (cursor.radius/2); 
      cursor.onDraw(cursor.e); 
      rLO.addView(cursor); 

      if (hSym > 0) { 
       vSym = 0; 
       cursorH.x = -cursor.x; 
       cursorH.y = cursor.y; 
       cursorH.onDraw(cursorH.e); 
       rLO.addView(cursorH); 
      } 

      if (vSym > 0) { 
       hSym = 0; 
       cursorV.x = cursor.x; 
       cursorV.y = -cursor.y; 
       cursorV.onDraw(cursorV.e); 
       rLO.addView(cursorV); 
      } 
      break; 

     case MotionEvent.ACTION_MOVE: 
      // Hardware accelerated at runtime 
      getWindow().setFlags(
        WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED, 
        WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED); 

      //update pointer to new position of stylus/finger 
      cursor.x = (int)event.getRawX() - (cursor.radius/2); 
      cursor.y = (int)event.getRawY() - (cursor.radius/2); 
      rLO.removeView(cursor); 
      rLO.addView(cursor); 

      if (hSym > 0) { 
       cursorH.x = -cursor.x; 
       cursorH.y = cursor.y; 
       rLO.removeView(cursorH); 
       rLO.addView(cursorH); 
      } 

      if (vSym > 0) { 
       cursorV.x = cursor.x; 
       cursorV.y = -cursor.y; 
       rLO.removeView(cursorV); 
       rLO.addView(cursorV); 
      } 
      break; 

     case MotionEvent.ACTION_UP: 
      if (vSym > 0 || hSym > 0) { 
       rLO.removeView(cursorH); 
       rLO.removeView(cursorV); 
      } 
      rLO.removeView(cursor); 

      break; 
     } // end switch 

참고 : ". 포인터"나는의 코드에 단어 "커서를"사용 여기에 지금까지 무엇을 가지고 포인터 (커서)는 프로그래밍 방식으로 원을 만드는 다른 클래스에서 가져옵니다.

답변

0

아마도 작동 할 수 있지만 문제는 화면 왼쪽 상단이 (0,0)입니다. 음수 위치가 화면에서 벗어납니다. 대신 화면의 너비 또는 높이를 하프 미러로 나누십시오.

+0

이전에 수정했습니다. symetry 코드가 나오기 전에 화면의 너비와 높이를 각각 2로 나누어 0,0을 원했던 부분을 다시 계산했습니다. 나는 또한 내보기가 여전히 작동하는지 (지금까지는 그렇게 좋았는지) 확인하기 위해 변경된 위치에서 지속적으로 업데이트 할 두 개의 텍스트 뷰를 추가했다. 그러나 나는 당신이 말한 것을 테스트 할 것입니다. 아마도 새로운 포인터 대신에 원래의 화면 설정 대신 계산 된 것이기 때문입니다. – SpicyWeenie

+0

이름을 잊어 버렸습니다. :) – SpicyWeenie