Coder Social home page Coder Social logo

tangoagency / material-intro-screen Goto Github PK

View Code? Open in Web Editor NEW
2.7K 56.0 410.0 27.14 MB

Inspired by Heinrich Reimer Material Intro and developed with love from scratch

License: MIT License

Java 100.00%
android material-design onboarding android-library

material-intro-screen's Introduction

Android Material Intro Screen

Download Codacy Badge Build Status Android Arsenal Material Intro Screen

Material intro screen is inspired by Material Intro and developed with love from scratch. I decided to rewrite completely almost all features in order to make Android intro screen easy to use for everyone and extensible as possible.

Features

Simple slide Custom slide Permission slide Finish slide
Simple slide Customslide Permission slide Finish slide

Usage

Step 1:

Add gradle dependecy

dependencies {
  compile 'agency.tango.android:material-intro-screen:{latest_release}'
}

Step 2:

First, your intro activity class needs to extend MaterialIntroActivity:

public class IntroActivity extends MaterialIntroActivity

Step 3:

Add activity to manifest with defined theme:

        <activity
            android:name=".IntroActivity"
            android:theme="@style/Theme.Intro" />

Step 4:

 @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        addSlide(new SlideFragmentBuilder()
                .backgroundColor(R.color.colorPrimary)
                .buttonsColor(R.color.colorAccent)
                .possiblePermissions(new String[]{Manifest.permission.CALL_PHONE, Manifest.permission.READ_SMS})
                .neededPermissions(new String[]{Manifest.permission.CAMERA, Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION})
                .image(agency.tango.materialintroscreen.R.drawable.ic_next)
                .title("title 3")
                .description("Description 3")
                .build(),
                new MessageButtonBehaviour(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        showMessage("We provide solutions to make you love your work");
                    }
                }, "Work with love"));
}

Explanation of SlideFragment usage:

  • possiblePermissions ⇾ permissions which are not necessary to be granted
  • neededPersmissions ⇾ permission which are needed to be granted to move further from that slide
  • MessageButtonBehaviour ⇾ create a new instance only if you want to have a custom action or text on a message button

Step 5:

Customize Intro Activity:

  • setSkipButtonVisible() ⇾ show skip button instead of back button on the left bottom of screen
  • hideBackButton() ⇾ hides any button on the left bottom of screen
  • enableLastSlideAlphaExitTransition() ⇾ set if the last slide should disapear with alpha hiding effect

Customizing view animations:

You can set enter, default and exit translation for every view in intro activity. To achive this you need to get translation wrapper for chosen view (for example: getNextButtonTranslationWrapper()) and set there new class which will implement IViewTranslation

getBackButtonTranslationWrapper()
                .setEnterTranslation(new IViewTranslation() {
                    @Override
                    public void translate(View view, @FloatRange(from = 0, to = 1.0) float percentage) {
                        view.setAlpha(percentage);
                    }
                });
  • getNextButtonTranslationWrapper()
  • getBackButtonTranslationWrapper()
  • getPageIndicatorTranslationWrapper()
  • getViewPagerTranslationWrapper()
  • getSkipButtonTranslationWrapper()

Custom slides

Of course you are able to implement completely custom slides. You only need to extend SlideFragment and override following functions:

  • backgroundColor()
  • buttonsColor()
  • canMoveFurther() (only if you want to stop user from being able to move further before he will do some action)
  • cantMoveFurtherErrorMessage() (as above)

If you want to use parallax in a fragment please use one of the below views:

And set there the app:layout_parallaxFactor attribute:

<agency.tango.materialintroscreen.parallax.ParallaxLinearLayout
xmlns:android="http://schemas.android.com/apk/res/android">

    <ImageView
        android:id="@+id/image_slide"
        app:layout_parallaxFactor="0.6"/>

All features which are not available in simple Slide Fragment are shown here: Custom Slide

Things I have used to create this

Getting Help

To report a specific problem or feature request, open a new issue on Github.

Company

Facebook     Twitter     LinkedIn

Here you can see open source work developed by Tango Agency.

Whether you're searching for a new partner or trusted team for creating your new great product we are always ready to start work with you.

You can contact us via [email protected]. Thanks in advance.

material-intro-screen's People

Contributors

bezmian avatar codacy-badger avatar radzio avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

material-intro-screen's Issues

Add special class for creating custom SlideFragments

Add special class for extending SlideFragment, to tell developer what he needs to implement. For example

public abstract int buttonsColor();

Currently extending SlideFragments leads developers to many mistakes so, we need that special class to tell them what they need to implement in order to avoid clutching.

ParallaxFrameLayout example

Hi,
I have set up ParallaxFrameLayout but nothing changed in my slide. Can some one please share me some examples of how it works? or even some videos which shows diffrent between parallax slides and simple one?
thanks very much

Transparent slide and image background

Hello, is it possible to create some transparent fragments and keep a grandient background or still image without running along with the slide?

And can I leave any fixed component? Out of the fragment that will be released as in the case of the intro introduced in the GoPro Capture APP?

unknown

Single slide intro calculates wrong background color

If you create an activity with a single slide, the background color ends up some odd translucent semi-random color. Adding a second slide seems to fix it.

Adding enableLastSlideAlphaExitTransition(true) also fixes this problem.

No resource found id #0x0

01-25 13:19:17.714 E/AndroidRuntime(13823): android.content.res.Resources$NotFoundException: Resource ID #0x0 01-25 13:19:17.420 E/UncaughtException(13823): at agency.tango.materialintroscreen.MaterialIntroActivity.color(MaterialIntroActivity.java:427)
What is up? It crashes. Why?

support 23.3.0

Hi
I added this library to my project
and I tried to build gradle
but it needed support libraries 25.0.1
while I use 23.3.0
I wanna keep using this
so is there any way that I can use this library and keep using support library version 23.3.0
????

Failed to resolve

Gradle failed to resolve compile 'agency.tango.android:material-intro-screen:{latest_release}
And i had to search for the latest release manually which is 0.0.4 and add it manually

compile 'agency.tango.android:material-intro-screen:0.0.4

Error message doesn't display on failed swipe

I think this library is great, but there is one thing that bugs me.

I made a custom fragment with some checkboxes, and I have overridden canMoveFurther and cantMoveFurtherErrorMessage. When the condition for canMoveFurther is not met, both pushing the button and trying to swipe to the next fragment fail (as is expected). However, the error message is only displayed if they push the button. If I try to swipe to the next fragment, nothing happens (I don't get the next fragment and the error message doesn't display). Are there plans to display the error message on swipe as well? That seems like it would be the desired behavior.

I'm not sure if the same happens on non-custom fragments, as I haven't tested, but it seems like it would.

Add value for bottom padding on custom slide

When we're creating a custom slide, we need to know the padding that we should add at the bottom, and I couldn't find this value anywhere in the docs, so I had to dig into the code until I found this: android:paddingBottom="164dp".

My suggestion is to create a value on the dimens folder for that particular padding, like customSlideBottomPadding, since it's a must have on custom slides.

You could also add a padding for a "buttonless" custom slide, so the user won't have a padding that is higher than necessary.

No support for Android TV / Gamepads

This doesn't work on an Android TV. From the demo project, I can move left and right to navigate between different views until the "Terms & Conditions". I can't focus on the checkbox and I'm stuck.

Slides displayed are semi-transparent

I tried implementing both Simple Slide and even Custom Slide. I both cases, the displayed Slide appears semi-transparent. Here is the image for Reference.

screenshot_1481084056

There is nothing different from your Code

public class TourActivity extends MaterialIntroActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        enableLastSlideAlphaExitTransition(true);

        addSlide(new TourOneFragment());
    }

    @Override
    public void onFinish() {
        super.onFinish();
        startActivity(new Intent(this, MainActivity.class));
    }
}

Am I missing something?

Regards

OpenGL crash on AVD running 6.0

Nothing special. Surprised this hasn't been noticed - or is it a problem with my system somehow?

Using Intel Atom x86 in emulator, running a generic 1080p Android 6.0 instance.

Added library, added following code:

addSlide(new agency.tango.materialintroscreen.SlideFragmentBuilder()
				.backgroundColor(R.color.wizard_bg_brown)
                .buttonsColor(R.color.wizard_button_pink)
                .title("Want more?")
                .description("Go on")
                .build());

App doesn't get an FC, but just silently dies, with this in the log:

11-14 17:27:01.825  1526  2644 I ActivityManager: Start proc 2887:com.cosmicdan.reptracker/u0a54 for activity com.cosmicdan.reptracker/.Main
11-14 17:27:01.848  2887  2887 W System  : ClassLoader referenced unknown path: /data/app/com.cosmicdan.reptracker-1/lib/x86
11-14 17:27:01.910  1187  1439 E SurfaceFlinger: ro.sf.lcd_density must be defined as a build property
11-14 17:27:01.927  2462  2567 E Surface : getSlotFromBufferLocked: unknown buffer: 0xae0cd8a0
11-14 17:27:01.944  2887  2901 I OpenGLRenderer: Initialized EGL, version 1.4
11-14 17:27:02.084  1187  1187 E EGL_emulation: tid 1187: eglCreateSyncKHR(1315): error 0x3004 (EGL_BAD_ATTRIBUTE)
11-14 17:27:02.158  1526  2645 W InputMethodManagerService: Focus gain on non-focused client com.android.internal.view.IInputMethodClient$Stub$Proxy@be8acfa (uid=10054 pid=2887)
11-14 17:27:02.212  2887  2901 E Surface : getSlotFromBufferLocked: unknown buffer: 0xb2882230
11-14 17:27:02.218  1526  1708 W InputMethodManagerService: Window already focused, ignoring focus gain of: com.android.internal.view.IInputMethodClient$Stub$Proxy@f1051b4 attribute=null, token = android.os.BinderProxy@ff888c6
11-14 17:27:02.758  2462  2567 W OpenGLRenderer: Incorrectly called buildLayer on View: ShortcutAndWidgetContainer, destroying layer...
11-14 17:27:02.758  2462  2567 W OpenGLRenderer: Incorrectly called buildLayer on View: ShortcutAndWidgetContainer, destroying layer...

A google search turned up a mention of a problem that could be related - a crash only in Marshmallow when trying to do a transition animation on a fragment - but I tried the following code to fix it, as the top stackoverflow reply hinted...

getWindow().getDecorView().setLayerType(View.LAYER_TYPE_SOFTWARE, null);

...to no avail.

I was really looking forward to using this :(

Unable To Add new slide

`public class RegisterActivity extends MaterialIntroActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    addSlide(new RegisterFragment());

    addSlide(new SlideFragmentBuilder()
            .backgroundColor(R.color.colorAccent)
            .buttonsColor(R.color.colorPrimary)
            .title("Want more?")
            .description("Go on")
            .build());
}

}`

When i use just addSlide(new RegisterFragment()); everything works fine but when i try adding another slide the app doesn't even start.

E/AndroidRuntime: FATAL EXCEPTION: main Process: octave.politico, PID: 15101 android.content.res.Resources$NotFoundException: Resource ID #0x0 at android.content.res.Resources.getValue(Resources.java:1369) at android.content.res.MiuiResources.getValue(MiuiResources.java:145) at android.content.res.Resources.getColor(Resources.java:981) at android.content.Context.getColor(Context.java:450) at android.support.v4.content.ContextCompatApi23.getColor(ContextCompatApi23.java:32) at android.support.v4.content.ContextCompat.getColor(ContextCompat.java:432) at agency.tango.materialintroscreen.MaterialIntroActivity.color(MaterialIntroActivity.java:427) at agency.tango.materialintroscreen.MaterialIntroActivity.getBackgroundColor(MaterialIntroActivity.java:419) at agency.tango.materialintroscreen.MaterialIntroActivity.access$1200(MaterialIntroActivity.java:44) at agency.tango.materialintroscreen.MaterialIntroActivity$ColorTransitionScrollListener.setViewsColor(MaterialIntroActivity.java:444) at agency.tango.materialintroscreen.MaterialIntroActivity$ColorTransitionScrollListener.pageScrolled(MaterialIntroActivity.java:434) at agency.tango.materialintroscreen.listeners.ViewBehavioursOnPageChangeListener.onPageScrolled(ViewBehavioursOnPageChangeListener.java:54) at android.support.v4.view.CustomViewPager.dispatchOnPageScrolled(CustomViewPager.java:1922) at android.support.v4.view.CustomViewPager.onPageScrolled(CustomViewPager.java:1896) at agency.tango.materialintroscreen.widgets.SwipeableViewPager.onPageScrolled(SwipeableViewPager.java:88) at android.support.v4.view.CustomViewPager.pageScrolled(CustomViewPager.java:1834) at android.support.v4.view.CustomViewPager.scrollToItem(CustomViewPager.java:695) at android.support.v4.view.CustomViewPager.onLayout(CustomViewPager.java:1778) at android.view.View.layout(View.java:16653) at android.view.ViewGroup.layout(ViewGroup.java:5438) at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1080) at android.view.View.layout(View.java:16653) at android.view.ViewGroup.layout(ViewGroup.java:5438) at android.support.design.widget.CoordinatorLayout.layoutChild(CoordinatorLayout.java:1167) at android.support.design.widget.CoordinatorLayout.onLayoutChild(CoordinatorLayout.java:852) at android.support.design.widget.CoordinatorLayout.onLayout(CoordinatorLayout.java:871) at android.view.View.layout(View.java:16653) at android.view.ViewGroup.layout(ViewGroup.java:5438) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:336) at android.widget.FrameLayout.onLayout(FrameLayout.java:273) at android.view.View.layout(View.java:16653) at android.view.ViewGroup.layout(ViewGroup.java:5438) at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1743) at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1586) at android.widget.LinearLayout.onLayout(LinearLayout.java:1495) at android.view.View.layout(View.java:16653) at android.view.ViewGroup.layout(ViewGroup.java:5438) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:336) at android.widget.FrameLayout.onLayout(FrameLayout.java:273) at android.view.View.layout(View.java:16653) at android.view.ViewGroup.layout(ViewGroup.java:5438) at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1743) at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1586) at android.widget.LinearLayout.onLayout(LinearLayout.java:1495) at android.view.View.layout(View.java:16653) at android.view.ViewGroup.layout(ViewGroup.java:5438) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:336) at android.widget.FrameLayout.onLayout(FrameLayout.java:273) at com.android.internal.policy.PhoneWindow$DecorView.onLayout(PhoneWindow.java:2678) at android.view.View.layout(View.java:16653) at android.view.ViewGroup.layout(ViewGroup.java:5438) at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2198) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1958) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1134) at android.view

Clickable web links

It would be useful if we can use clickable web links in the text resource.
Like: This is a text with weblinkGoogle

Please add the next things to the txt_title_slide's TextView: android:linksClickable="true" and android:autoLink="web" and than we can use web links with SlideFragment.
Thanks!

Is there a way to launch an intent from the message button?

I'm working with the library and i'm wondering if there's a way i could launch another activity from the new MessageButtonBehavior

Say something like :

   ```
     addSlide(new SlideFragmentBuilder()
            .backgroundColor(R.color.fourth_slide_background)
            .buttonsColor(R.color.fourth_slide_buttons)
            .title("Love the idea?")
            .description("Click the GET STARTED button or swipe right to start")

            .build(),
            new MessageButtonBehaviour(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                        Intent intent = new Intent(this, LoginActivity.class);
                        startActivity(intent);
                }
            }, "GET STARTED"));


I know i can use the `onFinish` method to trigger an action when the intro ends but am wondering if there's a way i can do it from `addSlide`

Title String Error

Hey, I'm Furkan. I get an error when I put a string in " .title " There is error;

description (java.lang.String) in SlideFragmentBuilder cannot be applied to (int)

Orientation Change: NullPointerException

After orientation change (not on first slide) it thorws a NullPointerException:

In Manifest the Intro Activity is declared as:

        <activity
            android:name=".Activties.IntroActivity"
            android:theme="@style/Theme.Intro"
            android:launchMode="singleTask"/>
java.lang.RuntimeException: Unable to start activity ComponentInfo{myApp/myApp.Activties.IntroActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.Resources android.content.Context.getResources()' on a null object reference
                                                             at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416)
                                                             at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
                                                             at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:4077)
                                                             at android.app.ActivityThread.-wrap15(ActivityThread.java)
                                                             at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1350)
                                                             at android.os.Handler.dispatchMessage(Handler.java:102)
                                                             at android.os.Looper.loop(Looper.java:148)
                                                             at android.app.ActivityThread.main(ActivityThread.java:5417)
                                                             at java.lang.reflect.Method.invoke(Native Method)
                                                             at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
                                                             at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
                                                          Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.Resources android.content.Context.getResources()' on a null object reference
                                                             at android.view.animation.AnimationUtils.loadAnimation(AnimationUtils.java:75)
                                                             at agency.tango.materialintroscreen.listeners.MessageButtonBehaviourOnPageSelected.showMessageButton(MessageButtonBehaviourOnPageSelected.java:57)
                                                             at agency.tango.materialintroscreen.listeners.MessageButtonBehaviourOnPageSelected.pageSelected(MessageButtonBehaviourOnPageSelected.java:40)
                                                             at agency.tango.materialintroscreen.listeners.ViewBehavioursOnPageChangeListener.onPageSelected(ViewBehavioursOnPageChangeListener.java:61)
                                                             at android.support.v4.view.ViewPager.dispatchOnPageSelected(ViewPager.java:1939)
                                                             at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:666)
                                                             at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:632)
                                                             at android.support.v4.view.ViewPager.onRestoreInstanceState(ViewPager.java:1454)
                                                             at android.view.View.dispatchRestoreInstanceState(View.java:14746)
                                                             at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:3121)
                                                             at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:3127)
                                                             at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:3127)
                                                             at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:3127)
                                                             at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:3127)
                                                             at android.view.View.restoreHierarchyState(View.java:14724)
                                                             at com.android.internal.policy.PhoneWindow.restoreHierarchyState(PhoneWindow.java:2035)
                                                             at android.app.Activity.onRestoreInstanceState(Activity.java:1004)
                                                             at android.app.Activity.performRestoreInstanceState(Activity.java:959)
                                                             at android.app.Instrumentation.callActivityOnRestoreInstanceState(Instrumentation.java:1163)
                                                             at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2389)
                                                             at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
                                                             at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:4077) 
                                                             at android.app.ActivityThread.-wrap15(ActivityThread.java) 
                                                             at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1350) 
                                                             at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                             at android.os.Looper.loop(Looper.java:148) 
                                                             at android.app.ActivityThread.main(ActivityThread.java:5417) 
                                                             at java.lang.reflect.Method.invoke(Native Method) 
                                                             at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
                                                             at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 

setButtonText in MessageButtonBehaviour

I would like to use the button on the slider to allow users to toggle a setting on and off before starting the app the first time. At first I assumed I could make a custom slide, but decided it would be easier if there were a simple setButtonText in this class that could be called when the user presses the button to reflect the value change in the background.

Similarly, updating the snackbar text would be convenient as well. I have added the first change myself in my app and it works pretty well with the intro flow.

Next button does not appear if translation is set

Even the sample doesn't show the next button. The button transitions into view after first slide.

The button appears if you remove:

getNextButtonTranslationWrapper()
               .setEnterTranslation(new IViewTranslation() {
                    @Override
                    public void translate(View view, @FloatRange(from = 0, to = 1.0) float percentage) {
                        view.setAlpha(percentage);
                    }
                });

Android version 4.3 (API 18) running on Samsung Galaxy Nexus.

Issue with marshamallow

I used only one slide and when slide right, MainActivity must open. But in case of marshmallow OS, when I slide right partially, MainActivity cannot visible.. And when I slide right totally then it is visible on screen. Except marshmallow, work completely. Any suggestion or any trick for Marshmallow OS..??

Permission request

When i added neededPermission like
.neededPermissions(new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.INTERNET}).After run my app on test device (5.1) I saw grant button on screen but problem is after clicked grant button nothing happening.

Inside "nextButtonBehaviour()" function you check hasPermissionToGrant but if you need permission not trigger permission request and not checking really need permission like "android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M" only set permissionNotGrantedClickListener so user click to grant see showPermissionsNotGrantedError() text

RTL bug

The next and previous buttons are on the opposite side . when testing on device with RTL language.

Translatable permissions buttons

Could this option be added? It's strange to have the whole application in one language and the buttons always in english.

Maybe the translation string could be passed as a second option to the neededPermissions and possiblePermissions methods.

Many thanks!

"animationDuration" styleable conflict

"animationDuration" styleable may conflict with another one from different library. And it does in my case. Propose to rename all styleables to include some unique prefix for ex. "mis".

CanMoveFurther() method not working on last slide.

Method canMoveFurther() from MaterialIntroActivity is not working on last slide. When the user is on the last slide and clicks finish button, that method is not running, and a user can pass further.

Disable move to previous slide

Sometimes it might be useful to disable the "back" function on the intro screen, so once the user have already finished with one slide he won't be able to come back.

As a suggestion, this could be done like on the original lib:

/* Add a navigation policy to define when users can go forward/backward */
        setNavigationPolicy(new NavigationPolicy() {
            @Override
            public boolean canGoForward(int position) {
                return true;
            }

            @Override
            public boolean canGoBackward(int position) {
                return false;
            }
        });

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.