TourGuide is an Android library that aims to provide an easy way to add pointers with animations over a desired Android View

Related tags

UI/UX TourGuide
Overview

TourGuide

TourGuide is an Android library. It lets you add pointer, overlay and tooltip easily, guiding users on how to use your app. Refer to the example below(this is a trivial example for demo purpose):

Documentation

Refer to this 👇

http://worker8.github.io/TourGuide/

License

click to reveal License
The MIT License (MIT)

Copyright (c) 2016 Tan Jun Rong

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
  • Cannot fetch dependencies

    Cannot fetch dependencies

    Hi there, I'm trying to add this library into my app and for some reason it is not letting me add this.

    Here's my app's build.gradle:

    apply plugin: 'com.android.application'
    
    android {
        compileSdkVersion 21
        buildToolsVersion "21.1.2"
    
    defaultConfig {
        applicationId "com.mstar.hotmaps"
        minSdkVersion 16
        targetSdkVersion 21
        versionCode 1
        versionName "1.0"
       }
       buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
      }
    }
    
    dependencies {
      compile fileTree(dir: 'libs', include: ['*.jar'])
      testCompile 'junit:junit:4.12'
      compile 'com.android.support:appcompat-v7:22.2.1'
      compile 'com.google.android.gms:play-services:7.8.0'
      compile ('com.github.worker8.tourguide:[email protected]'){
          transitive=true
      }
    }
    

    Is there anything I'm missing?

    Thanks.

    opened by zhanhui913 7
  • ChainTourGuide missing

    ChainTourGuide missing

    In samples you use some: ChainTourGuide but there is no source code or implementation of it.

    Same when I use dependencies: com.github.worker8:tourguide:[email protected]

    opened by mtrakal 4
  • icon problem and how to add the next button

    icon problem and how to add the next button

    i loved this tour guide, thx worker8!

    sorry the silly question, i know how to add the next button to the layout, but it get "darker", thats because the overlay color to make a "disabled screen" and give lighting to where the pointer is. How can i make the button above/below the tooltip or another position but without getting dark, i tried adding another tourguide just to the button, but it add another "darker" to all the layout making the white pointer a little gray..

    or is there another "good" approach for handling the tooltip in sequence and i dont know?

    and about the icon problem, when i add the tourguide to the gradle, my manifest get a conflict:

    android:icon="myicon"is also present at com.github.worker8:tourguide:1.0.10-SNAPSHOT:13:9 value=(@drawable/ic_launcher1)

    i already tried the android:replace icon but without results

    not related to the problem, but it was like I was doing:

    1. User open the app for the first time(check the SharedPrefs)
    2. Load a new TourGuide to the first element i want to teach and add the button next in the middle of the screen
    3. for each click on the button call a function called nextTip() and for each click it do a tipCount++; and inside the function nextTip() it check the number and set the actual tour to a new TourGuide... related to the position(after a cleanUp() ofc)

    thats the correct approach or there is a kind of actualTour.addTour(new TourGuide...) and some kind of actualTour.displayNextTour();

    thx the nice tourGuide ;)

    opened by defaultbr 4
  • Allow setting a custom layout for ToolTips

    Allow setting a custom layout for ToolTips

    This can be done via toolTip.setLayout(int resource, Context context).

    The layout is validated for existence of its basic components, so that the currently-existing setters still work.

    Please let me know your thoughts on this!

    Thanks

    opened by eronisko 3
  • Allow using AnimationSets for overlay exit animations

    Allow using AnimationSets for overlay exit animations

    When using passing an AnimationSet to setExitAnimation for an Overlay, Android would throw a NullPointerException when the overlay View was to be removed. E.g.

    09-02 11:08:17.643  19897-19897/tourguide.tourguide E/AndroidRuntime﹕ FATAL EXCEPTION: main
        Process: tourguide.tourguide, PID: 19897
        java.lang.NullPointerException: Attempt to read from field 'int android.view.View.mViewFlags' on a null object reference
                at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3197)
                at android.view.View.updateDisplayListIfDirty(View.java:14162)
                at android.view.View.getDisplayList(View.java:14189)
                at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3389)
                at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3368)
                at android.view.View.updateDisplayListIfDirty(View.java:14127)
                at android.view.View.getDisplayList(View.java:14189)
                at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3389)
                at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3368)
                at android.view.View.updateDisplayListIfDirty(View.java:14127)
                at android.view.View.getDisplayList(View.java:14189)
                at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3389)
                at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3368)
                at android.view.View.updateDisplayListIfDirty(View.java:14127)
                at android.view.View.getDisplayList(View.java:14189)
                at android.view.View.draw(View.java:14959)
                at android.view.ViewGroup.drawChild(ViewGroup.java:3405)
                at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3198)
                at android.view.View.draw(View.java:15234)
                at android.widget.FrameLayout.draw(FrameLayout.java:598)
                at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:2650)
                at android.view.View.updateDisplayListIfDirty(View.java:14167)
                at android.view.View.getDisplayList(View.java:14189)
                at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:273)
                at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:279)
                at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:318)
                at android.view.ViewRootImpl.draw(ViewRootImpl.java:2530)
                at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2352)
                at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1982)
                at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1061)
                at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5885)
                at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767)
                at android.view.Choreographer.doCallbacks(Choreographer.java:580)
                at android.view.Choreographer.doFrame(Choreographer.java:550)
                at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753)
                at android.os.Handler.handleCallback(Handler.java:739)
                at android.os.Handler.dispatchMessage(Handler.java:95)
                at android.os.Looper.loop(Looper.java:135)
                at android.app.ActivityThread.main(ActivityThread.java:5254)
                at java.lang.reflect.Method.invoke(Native Method)
                at java.lang.reflect.Method.invoke(Method.java:372)
                at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
                at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
    

    This commit fixes the problem using a post call on the overlay View.

    http://stackoverflow.com/questions/3025163/how-to-remove-a-view-when-animation-ends discusses this problem in a bit more detail.

    opened by eronisko 3
  • On touch - listener for dismiss

    On touch - listener for dismiss

    Hi there, what a remarkable lib)

    When the view that's inside playOn() is pressed, the tooltip, pointer and overlay dont' go away.

    So, i was wondering is there any other way to touch a tooltip and dismiss it somehow so that perhaps you move to the next step of your tour guide?

    opened by ieronimakisp 3
  • more customization

    more customization

    i wanted to use this library, however there are a lot of things missing for a regular use case. I give you a short list, if that is okay :)

    • If i enter more than a few words the tooltip expands beyond the screen borders. It shold automatically break the lines if necessary. A simple check if the screen boundaries are reached would be good.
    • The overlay is not alway exactly where i want it, e.g. i have an icon and the overlay is a little bit misplaced around it. so it would be good to be able to "adjust" its position and size through some relative value like "+=3dp" (add 3dp to the size, or move it 3dp to the left)...
    • Chaining of tourguides. Is this planned, how do i do it currently? e.g. i want the user first to click here, then there, and then here.
    • Option to just show the tourGuide without user interaction --> Let it close itself after the user clicked SOMEHWHERE on the Screen.

    BTW: Great work nevertheless, really looking forward to this library as the de facto standard for "overlay-helping-tour-guides"

    opened by eikaramba 3
  • DisplayMetrics does not return actual screen size. #56

    DisplayMetrics does not return actual screen size. #56

    When using the tourguide on a fullscreen ui, with the navigation and status bars hidden, the framelayoutwithhole view does not cover the area behind the navigation bar. DisplayMetrics is used to get the screen size but it does not return the actual raw pixel dimensions of the screen. Use a different method to get the screen size.

    opened by Tomasu 2
  • Is it possible to display TourGuide on AlertDialog

    Is it possible to display TourGuide on AlertDialog

    Hi, I am preparing one demo application for I am using this library for guiding. In my App I also want user to have look at alert dialog So I want tourGuide on Alert Dialog.

    Can you help me how do I archive this.?

    I am trying the same code but it show behind alert dialog.

    opened by drdesai03 2
  • tooltip not pointing to correct view.

    tooltip not pointing to correct view.

    Hi, I am using fragment in my activity. I am trying to create a tutorial for a fragment screen but somehow the the view being highlighted is not the correct one. I am iniating the Tourguide code in onViewCreated function of the fragment. Is it something I am missing considerably.

    opened by devjon 2
  • Remove unused resources to avoid conflicts

    Remove unused resources to avoid conflicts

    The main goal of this PR is to remove the unused app_name string from the library module.

    The problem happens when the library is added into a project, and app_name is not defined is the root module. In that case, gradle doesn't know which definition of app_name is more important, so it might device to use Tour Guide as app_name :(

    app_name is unused anyway, so I thought I could remove it to avoid confusion.

    As for ic_launcher1, I just saw it was unused so I thought it's be ok to remove it to avoid conflicts and save some space.

    note: tests run ok in my machine

    opened by akaita 1
  • Where is the java library ?

    Where is the java library ?

    I see that you changed the library language to kotlin, years back, but, I was using the java version of the same. Please point me to the java branch where I can still find the library and use in my project, a zip will do the job for me.

    Thanks

    opened by pks90 1
  • First tooltip does not appear

    First tooltip does not appear

    I am trying to use TourGuide on Wear OS. The tooltip does not appear the first time I use the "PlayOn" function but does the second time. Here is my code:

    `final TourGuide tourGuide = TourGuide.init(activity).with(TourGuide.Technique.CLICK); ToolTip toolTip = new ToolTip(); toolTip.setGravity(Gravity.TOP); toolTip.setDescription("Click description"); Overlay overlay = new Overlay(); overlay.setMDisableClickThroughHole(true); overlay.setMStyle(Overlay.Style.CIRCLE);

                    overlay.setOnClickListener(view -> {
                        tourGuide.cleanUp();
                        clicks++;
                        if(clicks == 1) {
                            tourGuide.playOn(episodeFragment.findViewById(R.id.play_button));
                        }
                    });
    
            Pointer downloadPointer = new Pointer(Gravity.CENTER);
            tourGuide.setPointer(downloadPointer)
                    .setToolTip(toolTip)
                    .setOverlay(overlay);
            tourGuide.playOn(episodeFragment.findViewById(R.id.play_button));`
    
    opened by joelphilippage 0
Owner
Tan Jun Rong
I like reading, coding, snowboarding. I make Android apps at my day job. Build bloggie.io with friends on my free time. Recently picked up drawing!
Tan Jun Rong
NumberPickerView - Custom Android View to provide a user friendly way of picking numbers. 🧪

?? Custom view for Android which provides a modern design and gestures for picking numbers in a user friendly way.

Mirkamal 6 Feb 16, 2022
Bubbles for Android is an Android library to provide chat heads capabilities on your apps. With a fast way to integrate with your development.

Bubbles for Android Bubbles for Android is an Android library to provide chat heads capabilities on your apps. With a fast way to integrate with your

Txus Ballesteros 1.5k Nov 24, 2022
A new canvas drawing library for Android. Aims to be the Fabric.js for Android. Supports text, images, and hand/stylus drawing input. The library has a website and API docs, check it out

FabricView - A new canvas drawing library for Android. The library was born as part of a project in SD Hacks (www.sdhacks.io) on October 3rd. It is cu

Antwan Gaggi 1k Nov 16, 2022
Android View for displaying and selecting values in a circle-shaped View, with animations and touch gestures.

CircleDisplay Android View for displaying and selecting (by touch) values / percentages in a circle-shaped View, with animations. Features Core featur

Philipp Jahoda 287 Nov 18, 2022
This library provides a simple way to add a draggable sliding up panel (popularized by Google Music and Google Maps) to your Android application. Brought to you by Umano.

Note: we are not actively responding to issues right now. If you find a bug, please submit a PR. Android Sliding Up Panel This library provides a simp

Umano: News Read To You 9.4k Nov 26, 2022
A beautiful Android custom View that works similar to a range or seekbar. With animations.

ValueBar A beautiful Android custom View that works similar to a range or seekbar. Selection by gesture. With animations. Supporting API level 11+. De

Philipp Jahoda 148 Aug 9, 2022
Nature takes back over.

ShatteredReclamation This is a plugin that allows the wild to slowly take player creations back over. Config Threads This plugin uses multiple threads

ShatteredSoftware 3 Jul 15, 2022
Android view that allows the user to create drawings. Customize settings like color, width or tools. Undo or redo actions. Zoom into DrawView and add a background.

DrawView Android view that allows the user to create drawings. Draw anything you like in your Android device from simple view. Customize draw settings

Oscar Gilberto Medina Cruz 838 Nov 14, 2022
Just a Wheel——A easy way to setEmptyView to ListView、GridView or RecyclerView etc..

中文说明在这里 TEmptyView Just a Wheel—— A easier way to setEmptyView. Without having to write xml file every time. It supports AdapterView(ListView,GridView

Barry 453 Sep 3, 2022
[] A simple way to "badge" any given Android view at runtime without having to cater for it in layout

Android ViewBadger A simple way to "badge" any given Android view at runtime without having to cater for it in layout. Note: If your aim is to replica

Jeff Gilfelt 3k Nov 28, 2022
Dali is an image blur library for Android. It contains several modules for static blurring, live blurring and animations.

Dali Dali is an image blur library for Android. It is easy to use, fast and extensible. Dali contains several modules for either static blurring, live

Patrick Favre-Bulle 1k Nov 11, 2022
A simple library to add Emoji support to your Android Application

Emoji A library to add Emoji support to your Android app. Emojis can be picked in a PopupWindow. In order to edit and display text with Emojis this li

Niklas Baudy 1.4k Nov 23, 2022
This library offers a simple method to add a small badge icon to your ActionBar-MenuItem

Android-ActionItemBadge ActionItemBadge is a library which offers a simple and easy to use method to add a badge to your action item! Screenshots Incl

Mike Penz 1.3k Nov 10, 2022
A simple, customizable and easy to use swipeable view stack for Android.

SwipeStack A simple, customizable and easy to use swipeable view stack for Android. QuickStart Include the Gradle dependency dependencies { compil

Frederik Schweiger 1.5k Nov 11, 2022
💳 A quick and easy flip view through which you can create views with two sides like credit cards, poker cards etc.

The article on how this library was created is now published. You can read it on this link here. →. ?? EasyFlipView Built with ❤︎ by Wajahat Karim and

Wajahat Karim 1.3k Nov 24, 2022
FloatingView can make the target view floating above the anchor view with cool animation

FloatingView FloatingView can make the target view floating above the anchor view with cool animation Links 中文版 README Blog about FloatingView demo.ap

UFreedom 1.8k Nov 19, 2022
用于做Path动画的自定义View。 I have a path.I have a view. (Oh~),Path(Anim)View.

PathAnimView 用于做Path动画的自定义View。 I have a path.I have a view. (Oh~),Path(Anim)View. 现已经找到图片->SVG->PATH的正确姿势, Now i have a pic.I have a view. Oh~,Path(A

张旭童 1.1k Oct 28, 2022
Material Design implementation for Android 4.0+. Shadows, ripples, vectors, fonts, animations, widgets, rounded corners and more.

Carbon Material Design implementation for Android 4.0 and newer. This is not the exact copy of the Lollipop's API and features. It's a custom implemen

null 3k Nov 23, 2022
:balloon: A lightweight popup like tooltips, fully customizable with an arrow and animations.

Balloon ?? A lightweight popup like tooltips, fully customizable with arrow and animations. Including in your project Gradle Add below codes to your r

Jaewoong Eum 2.7k Nov 23, 2022