I found my solution by creating subclass of PhysicsConnector.
public class CustomPhysicsConnector extends PhysicsConnector {
private float flagDisplacement;
public CustomPhysicsConnector(IShape pShape, Body pBody,
boolean pUdatePosition, boolean pUpdateRotation,
float flagDisplacement) {
super(pShape, pBody, pUdatePosition, pUpdateRotation);
this.flagDisplacement = flagDisplacement;
}
@Override
public void onUpdate(float pSecondsElapsed) {
final IShape shape = this.mShape;
final Body body = this.mBody;
if (this.mUpdatePosition) {
final Vector2 position = body.getPosition();
final float pixelToMeterRatio = this.mPixelToMeterRatio;
shape.setPosition(position.x * pixelToMeterRatio
- this.mShapeHalfBaseWidth, position.y
* pixelToMeterRatio
- (this.mShapeHalfBaseHeight + this.mShapeHalfBaseHeight
* flagDisplacement * 2f));
}
if (this.mUpdateRotation) {
final float angle = body.getAngle();
shape.setRotation(MathUtils.radToDeg(angle));
}
}
}
And now in CustomSprite class I have to implement in following manner.
setRotationCenter(getWidth() * 0.5f, getHeight() * 0.6f);
angelBody = PhysicsFactory.createBoxBody(mPhysicsWorld, getX()
+ getWidth() * 0.5f, getY() + getHeight() * 0.6f, pScale * 64f,
pScale * 60f, 0f, BodyType.StaticBody, fixtureDef);
angelBody.setUserData(Constants.USERDATA_ANGLE);
mPhysicsWorld.registerPhysicsConnector(new CustomPhysicsConnector(this,
angelBody, true, true, 0.1f));
Now I can rotate and change position of body attached to the sprite because by default it is attached to the centre but using this it is possible to set it any position.
Here I posted answer for other users because I don't want other users waste time on same thing.