Sorry, I am often guilty of rushing. This does should do what you want no?
from kivy.app import App
from kivy.uix.floatlayout import FloatLayout
from kivy.lang import Builder
from kivy.properties import BooleanProperty
from kivy.uix.behaviors import DragBehavior
Builder.load_string('''
<DraggableFloat>:
size_hint: (0.1, 0.1)
canvas:
Color:
rgba: [1, 0, 0, 0.5] if root.selected else [0, 0, 1, 0.5]
Rectangle:
pos: self.pos
size: self.size
''')
class DraggableFloat(DragBehavior, FloatLayout):
selected = BooleanProperty(False)
def on_touch_down(self, touch):
if self.collide_point(*touch.pos):
self.selected = True
return super(DraggableFloat, self).on_touch_down(touch)
def on_touch_up(self, touch):
self.selected = False
return super(DraggableFloat, self).on_touch_up(touch)
class TestApp(App):
def build(self):
container = FloatLayout()
container.add_widget(DraggableFloat())
return container
if __name__ == "__main__":
TestApp().run()