Volver al ranking

ChadCSong/ShineButton

Kotlin

This is a UI lib for Android. Effects like shining.

customeffectsbutton
Crecimiento de estrellas
Estrellas
4.2k
Forks
540
Crecimiento semanal
Issues
23
2k4k
ene 2023mar 2024may 2025jul 2026
README

ShineButton

License Platform API JitPack Maven Central

A lightweight, customizable Android UI library that adds a "shining" effect to buttons, similar to Twitter's heart animation.

Main Demo

Features

  • Customizable Shapes: Use any PNG mask as a button shape.
  • Vibrant Effects: Adjust shine color, size, count, and distance.
  • Interactive: Smooth animations for both clicking and shining.
  • Random Colors: Option to enable random colors for the shine effect.
  • Dialog Support: Works seamlessly inside Dialogs.
  • Lightweight: Minimal dependencies and easy to integrate.

Installation

  1. Add the JitPack repository to your root build.gradle file:
allprojects {
    repositories {
        ...
        maven { url 'https://jitpack.io' }
    }
}
  1. Add the dependency to your app/build.gradle file:
dependencies {
    implementation 'com.github.ChadCSong:ShineButton:v2.0.0'
}

Gradle (Maven Central)

Add the dependency to your app/build.gradle file:

dependencies {
    implementation 'com.sackcentury:shinebutton:2.0.0'
}

Maven

<dependency>
  <groupId>com.sackcentury</groupId>
  <artifactId>shinebutton</artifactId>
  <version>2.0.0</version>
  <type>aar</type>
</dependency>

Usage

XML Layout

The simplest way to use ShineButton is in your XML layout:

<com.sackcentury.shinebuttonlib.ShineButton
    android:id="@+id/shine_button"
    android:layout_width="50dp"
    android:layout_height="50dp"
    android:layout_centerInParent="true"
    android:src="@android:color/darker_gray"
    app:btn_color="@android:color/darker_gray"
    app:btn_fill_color="#FF6666"
    app:allow_random_color="false"
    app:siShape="@raw/like" />

Java Implementation

ShineButton shineButton = (ShineButton) findViewById(R.id.shine_button);
shineButton.init(activity);

Jetpack Compose Implementation

ShineButton now supports Jetpack Compose natively!

var isChecked by remember { mutableStateOf(false) }

ShineButtonCompose(
    isChecked = isChecked,
    onCheckedChange = { isChecked = it },
    shape = Icons.Default.Favorite, // Use any ImageVector
    btnColor = Color.LightGray,
    btnFillColor = Color.Red,
    shineColor = Color.Red,
    shineSize = 50.dp,
    allowRandomColor = true
)

Or create it dynamically:

ShineButton shineButtonJava = new ShineButton(this);
shineButtonJava.setBtnColor(Color.GRAY);
shineButtonJava.setBtnFillColor(Color.RED);
shineButtonJava.setShapeResource(R.raw.heart);
shineButtonJava.setAllowRandomColor(true);

LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(100, 100);
shineButtonJava.setLayoutParams(layoutParams);
linearLayout.addView(shineButtonJava);

Dialog Support

If you are using ShineButton inside a Dialog, call setFixDialog(dialog) to ensure it renders correctly:

shineButton.setFixDialog(dialog);

Attributes

Attribute Java Method Description Default
app:siShape setShapeResource(int) Raw resource (PNG mask) for the shape -
app:btn_color setBtnColor(int) Initial color of the button Color.GRAY
app:btn_fill_color setBtnFillColor(int) Color of the button after being checked Color.BLACK
app:allow_random_color setAllowRandomColor(boolean) Whether the shine effects use random colors false
app:shine_count setShineCount(int) Number of shine particles 8
app:shine_size setShineSize(int) Size of the shine particles in pixels -
app:big_shine_color setBigShineColor(int) Color of the primary shine particles -
app:small_shine_color setSmallShineColor(int) Color of the secondary shine particles -
app:shine_animation_duration setAnimDuration(int) Duration of the shine animation (ms) 1500
app:click_animation_duration setClickAnimDuration(int) Duration of the click animation (ms) 200
app:enable_flashing enableFlashing(boolean) Enable a flashing effect false
app:shine_distance_multiple setShineDistanceMultiple(float) Multiple of distance from button center 1.5f
app:shine_turn_angle setShineTurnAngle(float) Angle offset for shine particles 20

Preview

Small Shine More Shine Others
Small More Others

Roadmap

We are continuously working to improve ShineButton. Here is what we have planned:

  • Kotlin Migration: Fully convert the library to Kotlin for better safety and modern features.
  • Jetpack Compose: Provide a native Composable version of ShineButton.
  • Vector Support: Allow using VectorDrawable as shape masks.
  • Custom Animators: Support for custom easing and path-based animations.
  • Material 3: Update the demo app with Material 3 design and dynamic colors.
  • Performance: Further optimize canvas operations and memory allocation.

Requirements

  • Android API Level 14+ (Android 4.0+)

Credits

Third Party Bindings

React Native

You may now use this library with React Native via the module here

NativeScript

You may also use this library with NativeScript via the plugin here

License

MIT License. See LICENSE for details.

Repositorios relacionados
DarkFlippers/unleashed-firmware

Flipper Zero Unleashed Firmware

CGNU General Public License v3.0jailbreakkeeloq
flipperunleashed.com
21.9k1.9k
TomSchimansky/CustomTkinter

A modern and customizable python UI-library based on Tkinter

PythonPyPIMIT Licensepythonui
13.5k1.2k
Next-Flip/Momentum-Firmware

🐬 Feature-rich, stable and customizable Flipper Firmware

CGNU General Public License v3.0customcustom-firmware
momentum-fw.dev
8.9k564
zhiyiYo/PyQt-Fluent-Widgets

A fluent design widgets library based on C++ Qt/PyQt/PySide. Make Qt Great Again.

PythonPyPIGNU General Public License v3.0pyqt5widgets
qfluentwidgets.com
8k772
renzifeng/ZFPlayer

Support customization of any player SDK and control layer(支持定制任何播放器SDK和控制层)

Objective-CMIT Licensecustomplayer
7.1k1.8k
KingSora/OverlayScrollbars

A javascript scrollbar plugin that hides the native scrollbars, provides custom styleable overlay scrollbars, and preserves the native functionality and feel.

TypeScriptnpmMIT Licensescrollbar-pluginjavascript-scrollbar-plugin
kingsora.github.io/OverlayScrollbars
5.2k249
kalkih/mini-graph-card

Minimalistic graph card for Home Assistant Lovelace UI

JavaScriptnpmMIT Licenseautomationhome-assistant
3.9k265
forwardemail/email-templates

Create, preview (browser/iOS Simulator), and send custom email templates for Node.js. Made for @forwardemail, @ladjs, @cabinjs, @spamscanner, and @breejs.

JavaScriptnpmMIT Licensenodejsemail
forwardemail.net/docs/send-emails-with-node-js-javascript
3.7k333
Yalantis/Persei

Animated top menu for UITableView / UICollectionView / UIScrollView written in Swift

SwiftMIT Licenseiosswift
yalantis.com
3.4k309
florent37/ShapeOfView

Give a custom shape to any android view, Material Design 2 ready

JavaMavenApache License 2.0androidcustom
3.2k401
Touchwonders/Transition

Easy interactive interruptible custom ViewController transitions

SwiftMIT Licenseswiftios
2.6k127
forwardemail/free-email-forwarding

Repository archived and moved to monorepo

email-forwardingemail
github.com/forwardemail/forwardemail.net
2.4k176