title: Android: How to rotate a view with one finger
body: <p>I need to rotate a view which have some buttons. With the finger movement, view should also rotate along with it's child views accordingly. </p>
  
  <p>Till now I have implemented this:</p>
  
  <pre><code>private RelativeLayout mCircle;
  private double mCurrAngle = 0;
  private double mPrevAngle = 0;
  int i = 0;
  
  @Override
  public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
  
      mCircle = (RelativeLayout) findViewById(R.id.circle);
      mCircle.setOnTouchListener(this); // Your activity should implement
                                          // OnTouchListener
  }
  
  @Override
  public boolean onTouch(View v, MotionEvent event) {
      final float xc = mCircle.getWidth() / 2;
      final float yc = mCircle.getHeight() / 2;
  
      final float x = event.getX();
      final float y = event.getY();
  
      switch (event.getAction()) {
      case MotionEvent.ACTION_DOWN: {
          mCircle.clearAnimation();
          mCurrAngle = Math.toDegrees(Math.atan2(x - xc, yc - y));
          break;
      }
      case MotionEvent.ACTION_MOVE: {
          mPrevAngle = mCurrAngle;
          mCurrAngle = Math.toDegrees(Math.atan2(x - xc, yc - y));
          mCircle.setRotation((float) (mPrevAngle - mCurrAngle));         
  
          animate(mPrevAngle, mCurrAngle, 0);
          break;
      }
      case MotionEvent.ACTION_UP: {
          mPrevAngle = mCurrAngle = 0;
          break;
      }
      }
  
      return true;
  }
  
  private void animate(double fromDegrees, double toDegrees,
          long durationMillis) {
      final RotateAnimation rotate = new RotateAnimation((float) fromDegrees,
              (float) toDegrees, RotateAnimation.RELATIVE_TO_SELF, 0.5f,
              RotateAnimation.RELATIVE_TO_SELF, 0.5f);
      rotate.setDuration(durationMillis);
      rotate.setFillEnabled(true);
      rotate.setFillAfter(true);
      mCircle.startAnimation(rotate);
  }
  </code></pre>
  
  <p>But it is not smooth and thus can't be implemented.</p>
  
  <p>Thanks.</p>