compose-neumorphism icon indicating copy to clipboard operation
compose-neumorphism copied to clipboard

Neumorphism design implementation in jetpack compose

trafficstars

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

  • https://github.com/fornewid/neumorphism
  • https://github.com/CRED-CLUB/synth-android