Compose Neumorphism

by Sridhar

Neumorphism design implementation in jetpack compose

View on GitHub

Documentation

Neumorphism using Jetpack Compose

Neumorphism design implementation in jetpack compose.

Maven Central

Featured on Google dev library

What is Neumorphism

  • Neumorphism is a ui design concept which mainly uses shadows to create awesome looking UI.
  • Basic design concept from Neumorphism are Extruded and Pressed/Flat style.
  • Neumorphism design concept allows us to represent a objects like how it appear on real world. (like a extruded volume control nob on a media player app)

About this library

  • This library enables android application to create Neumorphic design using Jetpack Compose

Sample app preview

Dark Light
screen-dark screen-light

Install

You can install compose-neumorphism by adding this to your build.gradle file

dependencies {
  implementation 'io.github.sridhar-sp:neumorphic:0.0.6'
}

Features

  • Draw shadows on widget to bring out the neumorphic design, following neumorphic components are supported.
    • Extruded or Elevated view
    • Pressed View
  • All the above neumorphic component support two corner shape
    • RoundedCorner
    • Oval
  • Simply add a single neu modifier on any compose component to create a neumorphic design

Usage

Refer the sample app provided for more information.

Extruded or Elevated design

Extruded or Elevated button

Dark Light
elevated-button-dark elevated-button-light
    Button(
        modifier = Modifier
            .defaultMinSize(minHeight = 80.dp)
            .fillMaxWidth()
            .padding(defaultWidgetPadding)
            .neu(
                lightShadowColor = AppColors.lightShadow(),
                darkShadowColor = AppColors.darkShadow(),
                shadowElevation = defaultElevation,
                lightSource = LightSource.LEFT_TOP,
                shape = Flat(defaultCornerShape),
            ),
        colors = ButtonDefaults.buttonColors(
            backgroundColor = MaterialTheme.colors.surface
        )
    ) {
        Text(
            text = "Button", style = AppTextStyle.button()
        )
    }

Elevated card view with rounded rectangle shape

Dark Light
elevated-card-dark elevated-card-light
    Card(
        modifier = Modifier
            .size(128.dp)
            .neu(
                lightShadowColor = AppColors.lightShadow(),
                darkShadowColor = AppColors.darkShadow(),
                shadowElevation = defaultElevation,
                lightSource = LightSource.LEFT_TOP,
                shape = Flat(RoundedCorner(24.dp)),
            ),
        elevation = 0.dp,
        shape = RoundedCornerShape(24.dp),
    ){
    	// Add child components here.
    }
    

Pressed design

Pressed button

Dark Light
pressed-button-dark pressed-button-light
    Button(
        modifier = Modifier
            .fillMaxWidth()
            .padding(defaultWidgetPadding)
            .neu(
                lightShadowColor = AppColors.lightShadow(),
                darkShadowColor = AppColors.darkShadow(),
                shadowElevation = defaultElevation,
                lightSource = LightSource.LEFT_TOP,
                shape = Pressed(defaultCornerShape),
            ),
        colors = ButtonDefaults.buttonColors(
            backgroundColor = MaterialTheme.colors.surface,
        ),
        shape = RoundedCornerShape(12.dp),
        elevation = null

    ) {
        Text(text = "Button", style = AppTextStyle.button())
    }

Pressed card view with rounded rectangle shape

Dark Light
pressed-card-dark pressed-card-light
    Card(
        modifier = Modifier
            .size(128.dp)
            .neu(
                lightShadowColor = AppColors.lightShadow(),
                darkShadowColor = AppColors.darkShadow(),
                shadowElevation = defaultElevation,
                lightSource = LightSource.LEFT_TOP,
                shape = Pressed(RoundedCorner(24.dp)),
            ),
        elevation = 0.dp,
        shape = RoundedCornerShape(24.dp),
    ){
    	// Add child components here.
    }

Light source

LEFT_TOP RIGHT_TOP LEFT_BOTTOM RIGHT_BOTTOM
elevated_card_left_top_dark elevated_card_right_top_dark elevated_card_left_bottom_dark elevated_card_right_bottom_dark
elevated_card_left_top_light elevated_card_right_top_light elevated_card_left_bottom_light elevated_card_right_bottom_light

Shapes

Pressed Elevated
shape_pressed_card_dark shape_elevated_card_dark
shape_pressed_card_light shape_elevated_card_light

Sample implementation

Get it on Google Play

Reference

Dispatch Newsletter
Be the first to discover new Compose libraries
Curated Insights
Digest in 5 minutes or less
Android Analysis
Entertaining takes on happenings
Insider Tips
From top Android developers
Hidden Gems
You won't find elsewhere
"
"Thanks for taking the time and energy to do it so well!"
— Sebastian Lobato Genco
Android Engineer @ Q42
Join thousands of Android devs who look forward to Dispatch every week