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.