This is what I find more intuitive:
circle[] := DynamicModule[{a = {0, 0}, b = {1, 0}, r = 1, w}, { Dynamic@Circle[a, r], Locator[Dynamic[a, {(w = b - a) &, (a = #; b = a + w) &, None}]], Locator[Dynamic[b, (b = #; r = Norm[b - a]) &]] }] Graphics[circle[], Frame -> True, PlotRange -> 2]

And this is what fits well OP's example:
circle2[] := DynamicModule[{a = {0, 0}, b = {1, 0}, r = 1, s, p, hand}, {Thick, EventHandler[ Dynamic@hand@Circle[a, r], {"MouseDown" :> {s = {p[], a, b}; }, "MouseDragged" :> {{a, b} = (p[] - s[[1]] + #) & /@ Rest[s]} }], Locator[Dynamic[a, (a = #; r = Norm[b - a]) &]], Locator[Dynamic[b, (b = #; r = Norm[b - a]) &]]} , Initialization :> ( p[] := MousePosition["Graphics"]; hand = MouseAppearance[#, "LinkHand"] &; )] Graphics[circle2[], Frame -> True, PlotRange -> 2]
You can improve styling ofc.