Animated Floating Action Button in kivy

In Kivy, the Floating Action Button (FAB) is one of the most popular UI components in modern mobile applications. It represents the primary action and provides users with quick access to important functionality. Kivy is an open-source Python framework for creating cross-platform user interfaces. In this article, we will learn how to create an animated floating action button in Kivy.

What is a Floating Action Button in Kivy?

The floating action button is a circular button typically placed in the bottom-right corner of the screen. It represents the primary action of the application and provides a quick way for users to perform important tasks. FABs are essential UI elements in modern mobile applications, extensively used in apps like Google Maps, WhatsApp, and Gmail.

Setting Up the Environment

Before creating the animated FAB, ensure you have Kivy installed ?

pip install kivy

Creating an Animated Floating Action Button

We'll use Kivy's Animation API combined with widgets to create a smooth floating animation. The Animation API allows us to animate widget properties over time with various easing functions.

Example: Basic Animated FAB

Here's a complete implementation of an animated floating action button ?

from kivy.app import App
from kivy.uix.button import Button
from kivy.animation import Animation
from kivy.uix.boxlayout import BoxLayout

class AnimatedFAB(Button):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.size_hint = (None, None)
        self.size = (56, 56)
        self.pos_hint = {'center_x': 0.9, 'center_y': 0.1}
        self.background_color = (0.2, 0.6, 1, 1)  # Blue color
        self.text = '+'
        self.font_size = 20
        self.start_animation()

    def start_animation(self):
        # Create floating animation
        animation = Animation(center_y=100, duration=1.5, t='out_sine') + \
                   Animation(center_y=60, duration=1.5, t='in_sine')
        animation.repeat = True
        animation.start(self)

class FABApp(App):
    def build(self):
        layout = BoxLayout()
        fab = AnimatedFAB()
        layout.add_widget(fab)
        return layout

FABApp().run()

Enhanced FAB with Click Animation

Here's an improved version that includes click animation and better visual feedback ?

from kivy.app import App
from kivy.uix.button import Button
from kivy.animation import Animation
from kivy.uix.floatlayout import FloatLayout

class AdvancedFAB(Button):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.size_hint = (None, None)
        self.size = (56, 56)
        self.pos_hint = {'right': 0.95, 'y': 0.05}
        self.background_color = (1, 0.3, 0.3, 1)  # Red color
        self.text = '?'
        self.font_size = 24
        self.bind(on_press=self.on_fab_press)
        self.start_floating()

    def start_floating(self):
        # Gentle floating animation
        float_up = Animation(y=self.y + 10, duration=2, t='in_out_sine')
        float_down = Animation(y=self.y - 10, duration=2, t='in_out_sine')
        floating_cycle = float_up + float_down
        floating_cycle.repeat = True
        floating_cycle.start(self)

    def on_fab_press(self, instance):
        # Scale animation on press
        scale_down = Animation(size=(48, 48), duration=0.1)
        scale_up = Animation(size=(56, 56), duration=0.1)
        press_animation = scale_down + scale_up
        press_animation.start(self)
        print("FAB pressed!")

class MainApp(App):
    def build(self):
        layout = FloatLayout()
        
        # Add some background content
        content = Button(text='Main Content Area', 
                        size_hint=(0.8, 0.6),
                        pos_hint={'center_x': 0.5, 'center_y': 0.5},
                        background_color=(0.9, 0.9, 0.9, 1))
        
        fab = AdvancedFAB()
        
        layout.add_widget(content)
        layout.add_widget(fab)
        return layout

MainApp().run()

Key Animation Properties

Property Description Example Values
duration Animation length in seconds 1.0, 2.5
t Easing function 'in_sine', 'out_bounce'
repeat Loop animation True, False

Common Easing Functions

Kivy provides various easing functions for smooth animations ?

  • in_sine Smooth acceleration
  • out_sine Smooth deceleration
  • in_out_sine Smooth acceleration and deceleration
  • out_bounce Bouncing effect
  • in_out_elastic Elastic animation

Conclusion

Animated floating action buttons in Kivy enhance user experience with smooth visual feedback. Use the Animation API with appropriate easing functions to create engaging FABs that guide users to primary actions in your application.

Updated on: 2026-03-27T06:56:57+05:30

651 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements