An Android Jetpack Compose library providing customizable Squircle shapes for UI components
Squircle Shape
An Android Jetpack Compose library providing customizable Squircle shapes for UI components.
Why Squircle?
- The squircle is an intermediate shape between a square and a circle, present in digital and real products as well.
- Whereas the corners of a rounded square remain at 90 degree angle, the edges of a squircle curve smoothly outwards from each corner, forming an arc, thus creating an optically pleasing shape.
- Currently, there aren’t any squircle shapes in Android out of the box. That’s why this project was created, with the main goal being to provide an easy implementation of a squircle shape for UI components built with Jetpack Compose.
Requirements
- Project Min SDK version –
23
- Jetpack Compose version –
1.4.3
- Jetpack Compose Compiler version –
1.4.7
- Kotlin version –
1.8.21
Gradle Kotlin DSL Setup
Step 1
- Add the Jitpack maven repository in your
settings.gradle.kts
file.
repositories {
maven(url = "https://jitpack.io")
}
Step 2
implementation("com.github.stoyan-vuchev:squircle-shape:1.0.2")
- Or if you’re using a version catalog (e.g.
libs.versions.toml
), declare it there.
[versions]
squircle-shape = "1.0.2"
[libraries]
squircle-shape = { group = "com.github.stoyan-vuchev", name = "squircle-shape", version.ref = "squircle-shape" }
- Then include the dependency in your module
build.gradle.kts
file.
implementation(libs.squircle.shape)
Step 3
- Sync and rebuild the project.
Gradle Groovy Setup
Step 1
- Add the Jitpack maven repository in your project (root) level
build.gradle
file.
allprojects {
repositories {
maven { url 'https://jitpack.io' }
}
}
Step 2
implementation 'com.github.stoyan-vuchev:squircle-shape:1.0.2'
Step 3
- Sync and rebuild the project.
Usage
-
For components, use
SquircleShape()
, which comes in multiple variants for multiple use cases, so different variants have different parameters (percent: Float, radius: Dp, etc.). -
However, there is a single common parameter in all variants –
cornerSmoothing: Float
. -
The
cornerSmoothing
as you may have or may have not guessed, is responsible for adjusting the smoothness of the corners, the foundation of every squircle shape. -
Take a look at the SquircleShape.kt file for more information.
-
For a single percent based corner radius, use the variant of
SquircleShape()
withprecent: Int
andcornerSmoothing: Float
parameters.
SquircleShape(
percent = 100,
cornerSmoothing = 0.72f
)
-
There are also a pixel (Float) and dp (Dp) based variants.
-
For a multiple percent based corner radii, use the variant of
SquircleShape()
withtopStart: Int
,topEnd: Int
,bottomStart: Int
,bottomEnd: Int
, andcornerSmoothing: Float
parameters.
SquircleShape(
topStart = 50,
topEnd = 10,
bottomStart = 50,
bottomEnd = 10,
cornerSmoothing = 0.72f
)
-
There are also a pixel (Float) and dp (Dp) based variants.
-
Here is an example use of a Button using the default
SquircleShape()
.
Button(
onClick = { /* Action */ },
shape = SquircleShape() // Fully rounded squircle shape.
) {
Text(text = "Full Squircle")
}
- This is an example of Image clipped to the default
SquircleShape()
.
Image(
modifier = Modifier
.size(128.dp)
.clip(shape = SquircleShape()), // Clipped to a fully rounded squircle shape.
painter = painterResource(R.drawable.mlbb_novaria),
contentDescription = "An image of Novaria.",
contentScale = ContentScale.Crop
)
- There is also a support for drawing squircle shapes in Canvas –
drawSquircle()
. - All methods for creating a squircle shape use the
squircleShapePath()
. You can find it inside the SquircleShapePath.kt file.
License
This project is open source and available under the MIT License.
Contact
Created by @stoyan-vuchev – feel free to contact me! E-mail – contact.stoyan.vuchev@gmail.com