A simple material design app intro with cool animations and a fluent API.

Overview

Icon

material-intro

Build Status JitPack Downloads License GitHub issues

A simple material design app intro with cool animations and a fluent API.

Very inspired by Google's app intros.

Demo:

A demo app is available on Google Play:

Get it on Google Play

Screenshots:

Simple slide Custom slide Fade effect Permission request
Simple slide Custom slide Fade effect Permission request
SimpleSlide.java FragmentSlide.java IntroActivity.java SimpleSlide.java

Features:

  • Material design (check the docs)
  • Easy customization
  • Predefined slide layouts
  • Custom slides
  • Autoplay
  • Parallax slides
  • Fluent API

Table of Contents

  1. Setup
    1. Gradle Dependency
    2. Requirements
  2. Slides
    1. Standard slide
    2. Fragment slide
    3. Custom slide
  3. Customization
    1. Back button
    2. Next button
    3. CTA button
    4. Fullscreen
    5. Scroll duration
  4. Navigation
    1. Block navigation
    2. Navigate to slides
    3. Autoplay
    4. Callbacks
  5. Tips & Tricks
    1. Activity result
    2. Parallax slides
    3. Splash screens
  6. Apps using this library
  7. Changes
  8. Open-source libraries
  9. License

Setup:

Gradle Dependency:

material-intro is available on jitpack.io.

Add this in your root build.gradle file (not your module build.gradle file):

allprojects {
    repositories {
        maven { url 'https://jitpack.io' }
    }
}

Add this in your module build.gradle file:

dependencies {
    implementation 'com.heinrichreimersoftware:material-intro:x.y.z'
}

Requirements:

The activity must extend IntroActivity and have a theme extending @style/Theme.Intro:

public class MainIntroActivity extends IntroActivity {
    @Override 
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
	    // Add slides, edit configuration...
    }
}
<manifest ...>
    <application ...>
        <activity 
            android:name=".MainIntroActivity"
            android:theme="@style/Theme.Intro"/>
    application>
manifest>

(Unless mentioned otherwise, all of the following method calls should go in the Activity's onCreate().)

Slides:

material-intro has fluent style builders for both a simple text/image slide, as seen in Google's apps, and for slides featuring a custom Fragment or layout resource.

Feel free to submit an issue or pull request if you think any slide types are missing.

Standard slide (SimpleSlide):

Standard slide featuring a title, short description and image like Google's intros.

addSlide(new SimpleSlide.Builder()
        .title(R.string.title_1)
        .description(R.string.description_1)
        .image(R.drawable.image_1)
        .background(R.color.background_1)
        .backgroundDark(R.color.background_dark_1)
        .scrollable(false)
        .permission(Manifest.permission.CAMERA)
        .build());

Fragment slide (FragmentSlide):

Custom slide containing a Fragment or a layout resource.

addSlide(new FragmentSlide.Builder()
        .background(R.color.background_2)
        .backgroundDark(R.color.background_dark_2)
        .fragment(R.layout.fragment_2, R.style.FragmentTheme)
        .build());

(When using FragmentSlide with a Fragment, you should extend SlideFragment to proxy navigation calls to the intro activity.)

Custom slide (Slide):

Base slide. If you want to modify what's shown in your slide this is the way to go.

Customization:

Left ("back") button:

Control left button behavior or hide/show it.

/* Show/hide button */
setButtonBackVisible(true);
/* Use skip button behavior */
setButtonBackFunction(BUTTON_BACK_FUNCTION_SKIP);
/* Use back button behavior */
setButtonBackFunction(BUTTON_BACK_FUNCTION_BACK);

Right ("next") button:

Control right button behavior or hide/show it.

/* Show/hide button */
setButtonNextVisible(true);
/* Use next and finish button behavior */
setButtonNextFunction(BUTTON_NEXT_FUNCTION_NEXT_FINISH);
/* Use next button behavior */
setButtonNextFunction(BUTTON_NEXT_FUNCTION_NEXT);

CTA button:

Change the appearance of the "call to action" button:

/* Show/hide button */
setButtonCtaVisible(getStartedEnabled);
/* Tint button text */
setButtonCtaTintMode(BUTTON_CTA_TINT_MODE_TEXT);
/* Tint button background */
setButtonCtaTintMode(BUTTON_CTA_TINT_MODE_BACKGROUND);
/* Set custom CTA label */
setButtonCtaLabel(R.string.start)
/**/
setButtonCtaClickListener(new View.OnClickListener() {

});

Fullscreen:

Display the intro activity at fullscreen. This hides the status bar.

public class MainIntroActivity extends IntroActivity{
    @Override protected void onCreate(Bundle savedInstanceState){
        setFullscreen(true);
        super.onCreate(savedInstanceState);
	...
    }
}

Make sure to call setFullscreen() before calling super.onCreate()

Scroll duration:

Adjust how long a single slide scroll takes.

setPageScrollDuration(500);

(The page scroll duration is dynamically adapted when scrolling more than one position to reflect dynamic durations from the Material design docs. The exact formula for calculating the scroll duration is duration * (distance + sqrt(distance)) / 2.)

Navigation:

Block navigation:

There are three ways to block navigation for a slide:

  1. In a SlideFragment (using a FragmentSlide) by overriding canGoForward()/canGoBackward() methods.
  2. For a SimpleSlide by setting SimpleSlide.Builder#canGoForward(boolean)/SimpleSlide.Builder#canGoBackward(boolean). (If at least one permission is set to the SimpleSlide, navigation is automatically blocked until every permission is granted.)
  3. From your IntroActivity by setting a NavigationPolicy:
    setNavigationPolicy(new NavigationPolicy() {
        @Override public boolean canGoForward(int position) {
            return true;
        }
    
        @Override public boolean canGoBackward(int position) {
            return false;
        }
    });

Navigate to slides

Navigate through the intro manually using one of the following methods e.g. from a listeners callback. Each of them will respect blocked navigation settings.

/* Scroll to any position */
goToSlide(5);

/* Scroll to the next slide in the intro */
nextSlide();

/* Scroll to the previous slide in the intro */
previousSlide();

/* Scroll to the last slide of the intro */
goToLastSlide();

/* Scroll to the first slide of the intro */
goToFirstSlide();

Autoplay

Automatically scroll through the intro until user interacts with the intro.

/* Start an auto slideshow with 2500ms delay between scrolls and infinite repeats */
autoplay(2500, INFINITE);
/* Start an auto slideshow with default configuration  */
autoplay();
/* Cancel the slideshow */
cancelAutoplay()

Callbacks

If any of the above returns false when a user tries to navigate to a slide, a OnNavigationBlockedListener callback is fired that you can use to display a message. Additionally you can add plain-old ViewPager.OnPageChangeListeners to listen for page scrolls:

addOnNavigationBlockedListener(new OnNavigationBlockedListener() {
    @Override public void onNavigationBlocked(int position, int direction) { ... }
});

addOnPageChangeListener(new ViewPager.OnPageChangeListener(){
    @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { ... }
    @Override public void onPageSelected(int position) { ... }
    @Override public void onPageScrollStateChanged(int state) { ... }
});

Tips & Tricks:

Activity result:

You can check if the user canceled the intro (by pressing back) or finished it including all slides. Just call up the activity using startActivityForResult(intent, REQUEST_CODE_INTRO); and then listen for the result:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == REQUEST_CODE_INTRO) {
        if (resultCode == RESULT_OK) {
            // Finished the intro
        } else {
            // Cancelled the intro. You can then e.g. finish this activity too.
            finish();
	}
    }
}

Parallax slides:

You can easily achieve a nice looking parallax effect for any slide by using either ParallaxFrameLayout.java, ParallaxLinearLayout.java or ParallaxRelativeLayout.java and defining layout_parallaxFactor for its direct childrens. A higher factor means a stronger parallax effect, 0 means no parallax effect at all.

<com.heinrichreimersoftware.materialintro.view.parallax.ParallaxLinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    ... >

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:layout_parallaxFactor="0"
        ... />

    <ImageView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:layout_parallaxFactor="1.25"
        ... />

com.heinrichreimersoftware.materialintro.view.parallax.ParallaxLinearLayout>

Check the "Canteen"-demo for a layout example.

Splash screens:

If you want to show the intro only at the first app start you can use onActivityResult() to store a shared preference when the user finished the intro.

See the demo app for a sample splash screen implementation:

Apps using this library:

Changes:

See the releases section for changelogs.

Open-source libraries:

material-intro uses the following open-source files:

License:

MIT License

Copyright (c) 2017 Jan Heinrich Reimer

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
Comments
  • Databinding cast that crashes the app?

    Databinding cast that crashes the app?

    Hey there, Whenever I attempt to extend to app/IntroActivity class, i get this weird exception that seems to be casting the bindings generated for my package and the library's package? It crashes the app.

    Caused by: java.lang.ClassCastException: me.morgy.fish.databinding.MiActivityIntroBindingImpl cannot be cast to com.heinrichreimersoftware.materialintro.databinding.MiActivityIntroBinding

    opened by ghost 27
  • Merging with similar library: PaoloRotolo/AppIntro

    Merging with similar library: PaoloRotolo/AppIntro

    Would you be interested in merging this library with AppIntro? I think yours has some awesome features that could be brought over to our library if you have the time. If not, that's cool too...just know the offer is open :)

    type-question priority-low state-analysis 
    opened by Sammiches327 23
  • Error with databinding.MiActivityIntroBinding

    Error with databinding.MiActivityIntroBinding

    I had this erros today. How to solve it?

    [...]
        java.lang.RuntimeException: Unable to start activity ComponentInfo{com.vidroid.com.br.apps.organizze.pro/com.vidroid.com.br.apps.organizze.pro.activity.start.SliderActivity}: java.lang.ClassCastException: com.vidroid.com.br.apps.organizze.pro.databinding.MiActivityIntroBindingImpl cannot be cast to com.heinrichreimersoftware.materialintro.databinding.MiActivityIntroBinding
    [...]
    Caused by: java.lang.ClassCastException: com.vidroid.com.br.apps.organizze.pro.databinding.MiActivityIntroBindingImpl cannot be cast to com.heinrichreimersoftware.materialintro.databinding.MiActivityIntroBinding
            at com.heinrichreimersoftware.materialintro.app.IntroActivity.onCreate(IntroActivity.java:198)
            at com.vidroid.com.br.apps.organizze.pro.activity.start.SliderActivity.onCreate(SliderActivity.java:31)
    [...]
    

    I already read the articles 1 and 2. The solutions didn't work to me.

    opened by OtavioMiguel19 19
  • Strange/Glitchy navigation animations in Release 1.5.8

    Strange/Glitchy navigation animations in Release 1.5.8

    Firstly, thanks for an amazingly detailed library! I am currently using it in my published app for the introduction setup.

    Right now, my latest published app uses Release 1.5.5 of your library. This version seems to do fine with regard to the page navigation and the corresponding animations. Firstly, some context on my usage of your library: I have used multiple "SimpleSlide"s for my setup process. Some of these slides need to disable "CanGoForward" as the user is forced to click on the Cta button. The button issues an Intent that launches another app's activity and upon return to my app, in the onActivityResult, I retrieve the particular SimpleSlide, and replace it with an identical slide where "CanGoForward" is set to true. I haven't figured out a way to change a SimpleSlide's "CanGoForward" data member, so I had to replace it with a new Slide object. Then the user can press the forward button and continue.

    • This setup worked fine with the library version 1.5.5. See the following 30 second video for the corresponding workflow and the transitions of the slides: https://www.dropbox.com/s/05sfzz9fckx832j/Fit%20Notifications%20with%20Lib%20v1.5.5.mp4?dl=0
    • But then, with library version 1.5.8, the transitions are very buggy after I replace the slide in the onActivityResult in my setup activity. See the glitchy animations starting from time 00:12 in video: https://www.dropbox.com/s/s9v8d3424azs3m7/Fit%20Notifications%20Debug%20with%20Lib%20v1.5.8.mp4?dl=0

    Starting from 12th second, upon returning from the other app's activity + replacing slide with another that allows forward navigation, this is what happens: When I navigate forward by pressing the forward arrow, rather than a smooth transition, I see a sudden jump to the next Slide. Scrolling seems fine. However, on the next Slide, where "CanGoForward" is false again, scrolling causes the Slide's content to vanish (at 00:18 in 2nd video). Pressing the forward arrow disallows navigation as expected though. Pressing the back arrow causes some strange navigation animations that I can't quite explain.

    Could you please look into this as I cannot currently use the latest version due to this strange animation issues?

    type-bug 
    opened by abhijitvalluri 16
  • NoClassDefFoundError:  for DataBinderMapper even after enabling data binding

    NoClassDefFoundError: for DataBinderMapper even after enabling data binding

    I'm facing this critical crash even after adding this

    android {
        ....
        dataBinding {
            enabled = true
        }
    }
    

    Project Setup: Using Android 3.0 Canary 5 with Kotlin and new Android architecture components

    type-bug flag-help-wanted state-analysis priority-med 
    opened by AkshayChordiya 14
  • NEXT button remains visible in the last slide

    NEXT button remains visible in the last slide

    I am using the latest dependency Version 1.6.2 (with 4 Simple Slides and a custom slide)

    For NEXT button I am using setButtonNextFunction(BUTTON_NEXT_FUNCTION_NEXT);

    However, the NEXT button remains visible in the last slide (a custom slide in my case). This wasn't the case with Version 1.6.1. Illustrated in the below image.

    next button

    type-bug flag-help-wanted priority-high state-analysis 
    opened by CeJienAJPC 14
  • Changing to MIT license

    Changing to MIT license

    Hi,

    It's a nice library and I though of using it for a new project. Unfortunately, you license is complex. I suggest you change it to MIT which is the most common open source license these days. Otherwise, it makes it difficult for others to use it.

    Thanks in Advance!

    priority-high 
    opened by checklist 14
  • Parent activity interface added + missing functions added

    Parent activity interface added + missing functions added

    Added a small parent activity callback to forward create view / destroy view events of the slides:

    • id added to slides to distinguish the slides in the callbacks
    • added getter for each important view of the slides so that they can be used in the callbacks

    Other small changes:

    • getCurrentSlidePosition added (people may want to scroll to next/previous page or want to handle the back press differently if current position == 0)
    • goToItem manually to scroll to any position
    opened by MFlisar 11
  • Bugs in demo

    Bugs in demo

    1. when you scroll to any position != 0 and rotate the device, the function finishIfNeeded will close the activity
    2. if I disable this behaviour and go to the permissions page and rotate the device, then I can swipe to the next page (without animation though)

    Those bugs are not happening with the play store version, but with the on from the repo's master...

    In my clone I added a function to disable the finishIfNeeded check before adding slides and enable them again afterwards, which solves 1, but the second thing still happens, I don't know yet why though...

    type-bug 
    opened by MFlisar 11
  • [Critical] Support AndroidX

    [Critical] Support AndroidX

    When building an app with the AndroidX library (as well as material-intro), an error will occur.

    The error in question:

    error: cannot find symbol class ConstraintLayout
    
    opened by EdricChan03 10
  • Apps using this library

    Apps using this library

    opened by heinrichreimer 10
  • java.lang.RuntimeException:    at android.app.ActivityThread.performLaunchActivity

    java.lang.RuntimeException: at android.app.ActivityThread.performLaunchActivity

    java.lang.RuntimeException: at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2957) at android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:3032) at android.app.ActivityThread.-wrap11 (Unknown Source) at android.app.ActivityThread$H.handleMessage (ActivityThread.java:1696) at android.os.Handler.dispatchMessage (Handler.java:105) at android.os.Looper.loop (Looper.java:164) at android.app.ActivityThread.main (ActivityThread.java:6944) at java.lang.reflect.Method.invoke (Native Method) at com.android.internal.os.Zygote$MethodAndArgsCaller.run (Zygote.java:327) at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1374) Caused by: java.lang.IllegalStateException: at android.app.Activity.onCreate (Activity.java:1038) at androidx.core.app.ComponentActivity.onCreate (ComponentActivity.java:85) at androidx.activity.ComponentActivity.onCreate (ComponentActivity.java:323) at androidx.fragment.app.FragmentActivity.onCreate (FragmentActivity.java:273) at com.heinrichreimersoftware.materialintro.app.IntroActivity.onCreate (IntroActivity.java:176) at com.mypackage.MyIntroActivity.onCreate (MyIntroActivity.kt:12) at android.app.Activity.performCreate (Activity.java:7183) at android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1220) at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2910)

    Device

    • Device: [Samsung Galaxy J5 Prime, Samsung Galaxy A5(2017), Samsung Galaxy J6, Samsung Galaxy A7 (2018)]
    • OS: [Android]
    • Version [27]
    opened by zainriaz 0
  • Lag when swipe

    Lag when swipe

    Describe the bug

    A clear and concise description of what the bug is.

    Reproduce

    Steps to reproduce the behavior:

    1. Go to '...'
    2. Click on '....'
    3. Scroll down to '....'
    4. See error

    Expected behavior

    A clear and concise description of what you expected to happen.

    Stack trace / screenshots

    If applicable, add a stack trace or screenshots to help explain your problem.

    Device

    • Device: [e.g. Pixel2, iPhone6]
    • OS: [e.g. Android, iOS, Windows]
    • Browser [e.g. Chrome, Safari]
    • Version [e.g. 22]

    Additional context

    Add any other context about the problem here.

    opened by anubhav217 0
  • Glitch when moving from slide without button to slide with button

    Glitch when moving from slide without button to slide with button

    Describe the bug

    A clear and concise description of what the bug is.

    Reproduce

    Steps to reproduce the behavior:

    1. Go to '...'
    2. Click on '....'
    3. Scroll down to '....'
    4. See error

    Expected behavior

    A clear and concise description of what you expected to happen.

    Stack trace / screenshots

    If applicable, add a stack trace or screenshots to help explain your problem.

    Device

    • Device: [e.g. Pixel2, iPhone6]
    • OS: [e.g. Android, iOS, Windows]
    • Browser [e.g. Chrome, Safari]
    • Version [e.g. 22]

    Additional context

    Add any other context about the problem here.

    opened by anubhav217 0
  • RTL support

    RTL support

    Describe the bug

    A clear and concise description of what the bug is.

    Reproduce

    Steps to reproduce the behavior:

    1. Go to '...'
    2. Click on '....'
    3. Scroll down to '....'
    4. See error

    Expected behavior

    A clear and concise description of what you expected to happen.

    Stack trace / screenshots

    If applicable, add a stack trace or screenshots to help explain your problem.

    Device

    • Device: [e.g. Pixel2, iPhone6]
    • OS: [e.g. Android, iOS, Windows]
    • Browser [e.g. Chrome, Safari]
    • Version [e.g. 22]

    Additional context

    Add any other context about the problem here.

    opened by anubhav217 0
  • java.lang.ClassNotFoundException

    java.lang.ClassNotFoundException

    Describe the bug

    A clear and concise description of what the bug is.

    Reproduce

    Steps to reproduce the behavior:

    1. Go to '...'
    2. Click on '....'
    3. Scroll down to '....'
    4. See error

    Expected behavior

    A clear and concise description of what you expected to happen.

    Stack trace / screenshots

    If applicable, add a stack trace or screenshots to help explain your problem.

    Device

    • Device: [e.g. Pixel2, iPhone6]
    • OS: [e.g. Android, iOS, Windows]
    • Browser [e.g. Chrome, Safari]
    • Version [e.g. 22]

    Additional context

    Add any other context about the problem here.

    opened by anubhav217 0
  • Continuous Lagging when swiping

    Continuous Lagging when swiping

    Describe the bug

    A clear and concise description of what the bug is.

    Reproduce

    Steps to reproduce the behavior:

    1. Go to '...'
    2. Click on '....'
    3. Scroll down to '....'
    4. See error

    Expected behavior

    A clear and concise description of what you expected to happen.

    Stack trace / screenshots

    If applicable, add a stack trace or screenshots to help explain your problem.

    Device

    • Device: [e.g. Pixel2, iPhone6]
    • OS: [e.g. Android, iOS, Windows]
    • Browser [e.g. Chrome, Safari]
    • Version [e.g. 22]

    Additional context

    Add any other context about the problem here.

    opened by anubhav217 0
Releases(2.0.0)
  • 2.0.0(Sep 15, 2019)

    • Migrated to AndroidX & SDK 29 (minSdk is still 16).
    • Removed dependency on Data Binding as well as ButterKnife.
    • License changed from Apache v2 to MIT (see issue #176).
    • Translations: Danish, Italian, Swedish, Norwegian, Vietnamese.
    • Support for clickable web links.
    • Orientation is now locked while Introduction is in progress.
    • Allow overridable onClickListeners.
    • Several bug fixes & stability improvements.
    Source code(tar.gz)
    Source code(zip)
  • 1.6.1(Mar 21, 2017)

    • Method to go to any slide IntroActivity#goToSlide(int) (#166)
    • Changed license (#176)
    • Danish, Italian, Swedish and Norwegian translation (#159, #160, #172, #186, #187)
    • Some new utility methods getContentView() (#189), add/removeOnNavigationBlockedListener() (#183), getCurrentSlidePosition() (#195)
    • Web link support in description (#192)
    • Updated build tools and dependencies
    • Bug fixes (#162, #194, #146)
    Source code(tar.gz)
    Source code(zip)
    material-intro-1.6.1.apk(2.99 MB)
  • 1.6(Sep 20, 2016)

    • PageTransformers to implement custom scroll animations (#135)
    • Option to set parallax factor in java code (#127, thanks to @iampkhan)
    • Bug fixes (#122, #123, #124, #125, #128, #130, #131, #132, #133)

    Big thanks to @daniel-stoneuk for fixing some major bugs!

    Source code(tar.gz)
    Source code(zip)
  • 1.5.8(Sep 1, 2016)

  • 1.5.7(Jul 18, 2016)

  • 1.5.6(Jul 12, 2016)

  • 1.5.5(Jun 24, 2016)

    • Autoplay (#81)
    • Canteen demo (a76e350cebddee7899a3cb0857c1d916884ffa1e, many thanks to @JovieBrett)
    • Parallax feature now available from SimpleSlide (32bafa380627cfa9157fe78a5b17f567ef913306)
    • Added option to control page scroll speed and interpolator (803c22731f7ba89d7f195bee7113948924174dee)
    • Buf fixes (2facd238e3d663da430427a967c50c9ac7918589, #76, 5aebbcc1c0a3c7ca0836b761425b04b500bf92ac, 2ee464f8a7117481154ae4667b5661523ecebc48)
    Source code(tar.gz)
    Source code(zip)
  • 1.5.4(Jun 7, 2016)

    • Option to set CTA button text and click listener (#73, #74)
    • Fixed glitches in InkPagerIndicator (667be5b92e29e2ec382b3b29405be85d51803e7e)
    • Improved CTA button transitions (31af830c8b3843b6eac30ad82432c1da19347c1d)
    Source code(tar.gz)
    Source code(zip)
  • 1.5.3(Jun 6, 2016)

  • 1.5.2(Jun 1, 2016)

  • 1.5.1(May 29, 2016)

  • 1.5(May 28, 2016)

    • New Material guidelines (c4c446d0b17f2d7940f46507c6c1452252c20ae1, a805893e4ffac256b718ffca563620d2de59aec7)
    • Added option to hide back/skip and next/finish buttons (#43)
    • Added CTA button as per guidelines (a805893e4ffac256b718ffca563620d2de59aec7)
    • Bug fixes (#51, #52)
    Source code(tar.gz)
    Source code(zip)
  • 1.4(Apr 28, 2016)

  • 1.3(Apr 2, 2016)

    • Implemented proper fragment restoring (#20)
    • Added CharSequence options to SimpleSlide.Builder (#31)
    • Fixed layout issues (#25, 9cd78fc9690c6c86539ea91977a005f4e4a086dd)
    • Added demo for scrollable slides (#22)
    • Fixed bugs (#27)
    Source code(tar.gz)
    Source code(zip)
    demo.apk(2.05 MB)
  • 1.2.1(Mar 21, 2016)

  • 1.2(Mar 21, 2016)

  • 1.1(Mar 7, 2016)

  • 1.0(Feb 20, 2016)

Owner
Jan Heinrich Reimer
📚 Student • 💻 Developer • 🏛️ European
Jan Heinrich Reimer
Spantastic - an Android library that provides a simple and Kotlin fluent API for creating Android Spannable

Spantastic is an Android library that provides a simple and Kotlin fluent API for creating Android Spannable. This library wrappers SpannableStringBuilder and add methods to easily decorate the text with multiple spans.

Wellington Cabral da Silva 12 Nov 27, 2022
:octocat: A demo project based on MVVM architecture and material design & animations.

GithubFollows A simple demo project based on MVVM clean architecture and material design & animations. Architecture Specs & Open-source libraries Mini

Jaewoong Eum 288 Dec 25, 2022
🎬 A demo project for The Movie DB based on Kotlin MVVM architecture and material design & animations.

TheMovies A simple project for The Movie DB based on Kotlin MVVM clean architecture and material design & animations. How to build on your environment

Jaewoong Eum 420 Nov 29, 2022
🎬 A demo project using The Movie DB based on Kotlin MVVM architecture and material design & animations.

TheMovies2 A simple project using The Movie DB based on Kotlin MVVM architecture and material designs & animations. How to build on your environment A

Jaewoong Eum 450 Jan 2, 2023
A simple Pokedex App getting API with Retrofit, maintaining data using LiveData, and Material Design based on MVVM architecture

PokedexApp Pokedex A simple Pokedex App getting API with Retrofit, maintaining data using LiveData, and Material Design based on MVVM architecture. Te

Steven Adriano 0 Apr 12, 2022
📱 Android Library to implement Rich, Beautiful, Stylish 😍 Material Navigation View for your project with Material Design Guidelines. Easy to use.

Material NavigationView for Android ?? ?? Android Library to implement Rich, Beautiful Material Navigation View for your project with Material Design

Shreyas Patil 198 Dec 17, 2022
🛡️ Android security (camera/microphone dots indicators) app using Hilt, Animations, Coroutines, Material, StateFlow, Jetpack based on MVVM architecture.

??️ Android security app using Hilt, Animations, Coroutines, Material, StateFlow, Jetpack (Room, ViewModel, Paging, Security, Biometrics, Start-up) based on MVVM architecture.

null 639 Jan 6, 2023
Sample material transition animations for Android

See ListOfThings for a newer implementation. Android Material Transitions This Android project samples some Material Design-ish transitions for list i

Todd Way 1.2k Dec 7, 2022
Photon Framework provides cool way to Discord Slash Commands 👩‍💻 🚧

Photon Framework provides cool way to Discord Slash Commands ??‍?? ??

Codename Photon 16 Dec 20, 2022
A simple weather application focused on material UI and API data calls.

YAWA-WeatherApp YAWA is a simple single screen, single activity weather app with material UI. This repository is mainly focused on people who want to

Debayan Ghosh Dastider 2 Sep 1, 2022
An small android app based on banking logic, usilng SQLITE as database, material design, navigation drawer implemented

Android Banking App Project - Using Sqlite The Banking app using java in android studio and sqlite for crud. Packages Used Material Design Contributin

Md-Mahin-Rahman 4 Dec 6, 2022
Design patterns are typical solutions to common problems in software design

Design patterns are typical solutions to common problems in software design. Each pattern is like a blueprint that you can customize to solve a particular design problem in your code.

hamid 4 Aug 30, 2022
OpenLibra client on Material Design

OpenLibra-Material This repositores aims to show examples about material design in a real app, the application is a client of the webpage OpenLibra a

Saul Molinero 360 Feb 5, 2022
Implementation of Instagram with Material Design (originally based on Emmanuel Pacamalan's concept)

InstaMaterial Updated Current source code contains UI elements from Design Support Library. If you still want to see how custom implementations of e.g

Mirosław Stanek 5k Dec 27, 2022
Material design file manager for Android

Amaze File Manager Overview Open Source, light and smooth Based on Material Design guidelines Basic features like cut, copy, delete, compress, extract

Team Amaze 4.2k Jan 4, 2023
Material Design Calendar

Etar Calendar Etar (from Arabic: إِيتَار) is an open source material designed calendar made for everyone! Why? Well, I wanted a simple, material desig

Suhail Alkowaileet 74 Nov 30, 2022
Material design file manager for Android

Amaze File Manager Overview Open Source, light and smooth Based on Material Design guidelines Basic features like cut, copy, delete, compress, extract

Team Amaze 4.2k Jan 5, 2023
MaterialDesignColorPalette 4.2 0.0 L3 Java This is a dev tool to visualize the colours of Material design defined on

MaterialDesignColorPalette This is a dev tool to visualize the colours of Material design defined on http://www.google.com/design/spec/style/color.htm

Guillaume Imbert 256 Oct 2, 2022