code: public boolean setLocalRotation(int boneindex, float x, float y, float z, float w)
      {
          if (mSkeleton.isLocked(boneindex))
              return false;
  
          Bone bone = mBones[boneindex];
  
          bone.setLocalRotation(x, y, z, w);
          if (mSkeleton.getParentBoneIndex(boneindex) < 0)
          {
              bone.WorldMatrix.set(bone.LocalMatrix);
          }
          else
          {
              mNeedSync = true;
          }
          bone.Changed = LOCAL_ROT;
          if (sDebug)
          {
              Log.d("BONE", "setLocalRotation: %s %s", mSkeleton.getBoneName(boneindex), bone.toString());
          }
          return true;
      }
docs: Sets the local rotation for the designated bone.
  <p>
  All bones in the skeleton start out at the origin oriented along the bone axis (usually 0,0,1).
  The pose orients and positions each bone in the skeleton with respect to this initial state.
  The local bone matrix expresses the orientation and position of the bone relative
  to it's parent. This function sets the rotation component of that matrix from a quaternion.
  The position of the bone is unaffected.
  @param boneindex	zero based index of bone to rotate.
  @param x,y,z,w	quaternion with the rotation for the named bone.
  @see #setLocalRotations
  @see #setWorldRotations
  @see #setWorldMatrix
  @see GVRSkeleton#setBoneAxis