• Stars
    star
    600
  • Rank 74,640 (Top 2 %)
  • Language
    Kotlin
  • License
    Apache License 2.0
  • Created over 6 years ago
  • Updated over 4 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

🀯 A slider widget rich in emoji and highly customisable.
Sample app Sample usage
First Sec

Emoji Slider

Download Codacy Badge

A custom made SeekBar heavily inspired by this great widget from Instagram.

πŸ’» Installation

Add a dependency to your build.gradle:

dependencies {
    implementation 'com.bernaferrari.emojislider:emojislider:0.3.2'
}

It is fully stable, but there might be some changes to the API, like improved naming, or some small changes on functions. You can use it fine already.

Download the sample app to experience it.

🀯 Features

  • Customize with xml using custom handy attributes.
  • Customize in your activity, fragment or dialog.
  • Creating new widget programmatically.

😍 Reselection Enabled Sample

Up Down
First Sec

❕ Basic Usage

Place the EmojiSlider in your layout.

<com.bernaferrari.emojislider.EmojiSlider
    android:id="@+id/slider"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"/>

Important: if you want to have the emoji floating above the slider when it is pressed/dragged, you need to supply a view, preferably on the foreground, to be drawn and tell the slider who the view is. Example:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">

    <com.bernaferrari.emojislider.EmojiSlider
        android:id="@+id/slider"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:padding="72dp" />

    <View
        android:id="@+id/slider_particle_system"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</FrameLayout>
   findViewById<EmojiSlider>(R.layout.slider).sliderParticleSystem = slider_particle_system

❔ Usage

To track the current position of the slider, set the positionListener, as shown below:

val slider = findViewById<EmojiSlider>(R.id.slider)
slider.positionListener = { p -> Log.d("MainActivity", "current position is: $p" )}

You can also track the beginning and completion of the movement of the slider, using the following properties: startTrackingListener and stopTrackingListener. Examples below:

slider.startTrackingListener = { /* action on slider touched */ }
slider.stopTrackingListener = { /* action on slider released */ }

Here is a random example in Kotlin:

// Kotlin
val slider = findViewById<EmojiSlider>(R.id.slider)
slider.sliderParticleSystem = slider_particle_system
slider.position = 0.25f
slider.averagePosition = 0.75f
slider.allowReselection = true
slider.colorStart = Color.RED
slider.colorEnd = Color.YELLOW
slider.setResultDrawable(profilePictureBitmap)

Here is a random example in Java:

// Java
final EmojiSlider slider = findViewById(R.id.slider);
slider.setStartTrackingListener(new Function0<Unit>() {
    @Override
    public Unit invoke() {
        Log.d("D", "setBeginTrackingListener");
        return Unit.INSTANCE;
    }
});

slider.setStopTrackingListener(new Function0<Unit>() {
    @Override
    public Unit invoke() {
        Log.d("D", "setEndTrackingListener");
        return Unit.INSTANCE;
    }
});

// Or Java 8 lambda
slider.setPositionListener(pos -> {
    Log.d("D", "setPositionListener");
    return Unit.INSTANCE;
});

Check the sample app for more. The sample app even shows how to use Glide to load a Bitmap into a round drawable.

🎨 Customization and Attributes

All customizable attributes for EmojiSlider:

Attribute Name Default Value Description
app:emoji 😍 The emoji which will be used on the slider
app:progress_value 0.25f Initial position for the progress in range from 0.0 to 1.0.
app:average_progress 0.50f Initial position for the average value in range from 0.0 to 1.0.
app:bar_progress_color_start @color/slider_gradient_start Color of the start (left side) of the progress bar.
app:bar_progress_color_end @color/slider_gradient_end Color of the end (right side) of the progress bar
app:bar_track_color @color/slider_track Color of the bar's track.
app:thumb_size_percent_on_pressed 0.9 Thumb size automatically shrinks to 90% (0.9) its original size when a touch is detected. This allows to choose another value between 0.0 and 1.0.
app:allow_reselection false Should the slider behave like the original Emoji Slider or like a SeekBar? When true, it behaves like a SeekBar, so average/profile/result will not be shown.
app:is_touch_disabled false Allow to disable touch input.
app:should_display_tooltip true Allow to disable the tooltip when a value is selected.
app:tooltip_text @string/average_answer The "average answer" text, translated into 40 languages. You can overwrite it using this.
app:tooltip_dismiss_timer 2500 The tooltip auto hide after some period, in milliseconds. Choose -1 to disable this timer.
app:should_display_average true Allow to disable the average circle when a value is selected. If this is disabled, tooltip will not be shown even if it is enabled.
app:should_display_average false Allow to disable the round circle that shows up when a value is selected (usually with user's profile picture).
app:register_touches_outside_thumb true The original Emoji Slider only registers touch inside the thumb. The SeekBar register on the bar, too. This allows to choose which best suits you.
app:particle_direction up Should the floating emoji go up or down after finger leaves the bar?

Of course, some attributes might have better names than others and documentation might not be perfect. If you find anything wrong or weird, let me know.

πŸ“ƒ Libraries Used

🦁 Screenshots

Floating Value Selected
First Sec
Sample Sample
Third Fourth

Reporting Issues

Issues and Pull Requests are welcome. You can report here.

License

Copyright 2018 Bernardo Ferrari.

Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

More Repositories

1

FigmaToCode

Generate responsive pages and apps on HTML, Tailwind, Flutter and SwiftUI.
TypeScript
3,725
star
2

GradleKotlinConverter

Convert from Groovy to Kotlin DSL for Gradle, focused on Android.
TypeScript
916
star
3

ChangeDetection

Automatically track websites changes on Android in background.
Kotlin
704
star
4

color-studio

It is too hard to build coherent and accessible themes with the right colors. This should help.
Dart
418
star
5

SDKMonitor

App to display and monitor the targetSDK from installed apps.
Kotlin
131
star
6

CashBalancer

It is too hard to balance money across different assets and accounts.
Dart
79
star
7

RandomColorScheme

Flutter plugin to help experiment with different Color Schemes without pain.
Dart
77
star
8

ColorBlindnessFlutter

Simulate color blindness in color themes.
Dart
59
star
9

hsluv-dart

Dart port of HSLuv, a human-friendly alternative to HSL based on human experiments.
Dart
51
star
10

FastDarkTheme

Experiment with dark themes based on popular apps.
Dart
48
star
11

SafeChangeLog

Make sure your changelogs are safe in all devices.
Rust
40
star
12

CarouselGifViewer

Efficiently display a list of GIFs in a carousel (RecyclerView).
Kotlin
36
star
13

FlutterResourceRanker

Find underused colors, overused magical numbers and the largest classes in any Flutter project.
Kotlin
23
star
14

non_uniform_border

Provides a border class for Flutter that allows different widths for each side with a single color.
Dart
22
star
15

current-setup

My current terminal config, .zshrc file and brew apps list.
Shell
5
star
16

RegexLearner

A journey through the world with regular expressions. Swift Student Challenge (WWDC20) winner.
Swift
3
star
17

material-color-utilities-mojo

Dart
3
star
18

MultiModule

Temporary project
Kotlin
1
star
19

covid19-br

JavaScript
1
star
20

bernaferrari.github.io

A quick showcase of my projects (that were compiled for the web).
JavaScript
1
star