출처: 스택오버플로우 + http://www.bytefish.de/wiki/android

 

 

안드로이드나 다른 프로그램도 마찬가지 이겠지만

 

급변하는 값에 대해서 조금 스무스 하게 어떻게 할수 없을까 하고 의문을 가지게 됩니다.

 

예를 들어서 센서로 기울기값을 받는데 이 기울기값을 그대로 받게 된다면 (FASTEST로..) 매우 빠른 값을 가져오기때문에

 

보기에도 불편하고 나중에 ui로 만들어도 그렇게 이쁘게 나타나지 않습니다.

 

이럴떄 사용하는것이 로우패스필터공식입니다.

 

공식사용법은 다음과 같습니다.

 

private float mFilteringFactor = 0.8f;
//을  먼저 선언하시고

 

// smooth data (low-pass filter)

mOrientation = (orientation*mFilteringFactor) + (mOrientation*(1.0f-mFilteringFactor));

 

이렇게 하시면 됩니다.

 

저 위에서 mFilteringFactor을 조절하면 얼마나 스무스하게 값을 내 뱉을 것인가에 대한 답변이 될거 같습니다.

 

제가 쓴 예를 보여드리겠습니다.

 

mOrientationListener = new OrientationEventListener(this,
    SensorManager.SENSOR_DELAY_FASTEST) {
   public void onOrientationChanged(int orientation) {
    //mOrientation = orientation; <- 원래 우리가 센서를 쓸때 사용하는 방법
    
    mOrientation = (orientation*mFilteringFactor) + (mOrientation*(1.0f-mFilteringFactor));//<ㅡ 스무스한 센서를 사용하고싶을때
    
   // mView.invalidate();
   }
  };
  mOrientationListener.enable();

 

 

끝까지 봐 주셔서 감사합니다.

 

잘쓰이길 바랍니다.

 

p.s.센서 말고도 다른 급변하는 값에도 위와같이 쓸 수 있습니다.

p.s.2.참고로 SENSOR_DELAY_FASTEST값도 NORMAL, UI 같은 값으로 변경가능합니다. 이 값과 mFilteringFactor 값을 잘 조정하셔서 원하시는 스무스 한 이동을 찾으시면 될 것입니다.