A simple and customizable Android full-screen image viewer with shared image transition support, "pinch to zoom" and "swipe to dismiss" gestures

Overview

codebeat badge Codacy Badge Download License

Stfalcon ImageViewer

A simple and customizable full-screen image viewer with shared image transition support, "pinch to zoom" and "swipe to dismiss" gestures. Compatible with all of the most popular image processing libraries such as Picasso, Glide etc. Based on PhotoView by chrisbanes.

alt tag alt tag

Who we are

Need iOS and Android apps, MVP development or prototyping? Contact us via [email protected]. We develop software since 2009, and we're known experts in this field. Check out our portfolio and see more libraries from stfalcon-studio.

Requirements

  • A project configured with the AndroidX
  • SDK 19 and and higher

Demo Application

Get it on Google Play

Install

Download via Gradle:

Add this to the project build.gradle file:

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

And then add the dependency to the module build.gradle file:

implementation 'com.github.stfalcon:stfalcon-imageviewer:latest_version'

Download via Maven:

<dependency>
  <groupId>com.github.stfalcon</groupId>
  <artifactId>stfalcon-imageviewer</artifactId>
  <version>latest_version</version>
  <type>pom</type>
</dependency>

Where the latest_version is the value from Download badge.

Usage

Simple usage

All you need to show the viewer is to pass the context, list or array of your image objects and the implementation of the ImageLoader and call the show() method:

StfalconImageViewer.Builder<Image>(context, images) { view, image ->
    Picasso.get().load(image.url).into(view)
}.show()

Piece of cake!

Transition animation

To improve the UX of your app you would like to add a transition when a user opens the viewer. And this is simple as never before! Just tell the viewer which image should be used for animation using withTransitionFrom(myImageView) method and the library will do it for you!

If you need more advanced behavior like updating transition target while changing images in the viewer please see the sample app for how to do this.

Update images list on the fly

There are a lot of common cases (such as pagination, deleting, editing etc.) where you need to update the existing images list while the viewer is running. To do this you can simply update the existing list (or even replace it with a new one) and then call updateImages(images).

Change current image

Images are not always leafed through by the user. Maybe you want to implement some kind of preview list at the bottom of the viewer - setCurrentPosition is here for help. Change images programmatically wherever you want!

Custom overlay view

If you need to show some content over the image (e.g. sharing or download button, description, numeration etc.) you can set your own custom view using the setOverlayView(customView) and bind it with the viewer through the ImageViewer.OnImageChangeListener.

Background

Use the setBackgroundColorRes(colorRes) or setBackgroundColor(colorInt) to set a color of the fading background.

Images margin

Simply add margins between images using the withImagesMargin(context, dimenRes) method for dimensions, or use the withImageMarginPixels(int) for pixels size.

Container padding

Overlay image hides part of the images? Set container padding with dimens using withContainerPadding(context, start, top, end, bottom) or withContainerPadding(context, dimen) for all of the sides evenly. For setting a padding in pixels, just use the withContainerPadding(...) methods variant.

Status bar visibility

Control the status bar visibility of the opened viewer by using the withHiddenStatusBar(boolean) method (true by default)

Gestures

If you need to disable some of the gestures - you can use the allowSwipeToDismiss(boolean) and allowZooming(boolean) methods accordingly.

Options overview

Here is the example with all of the existing options applied:

StfalconImageViewer.Builder<String>(this, images, ::loadImage)
            .withStartPosition(startPosition)
            .withBackgroundColor(color)
            //.withBackgroundColorResource(R.color.color)
            .withOverlayView(view)
            .withImagesMargin(R.dimen.margin)
            //.withImageMarginPixels(margin)
            .withContainerPadding(R.dimen.padding)
            //.withContainerPadding(R.dimen.paddingStart, R.dimen.paddingTop, R.dimen.paddingEnd, R.dimen.paddingBottom)
            //.withContainerPaddingPixels(padding)
            //.withContainerPaddingPixels(paddingStart, paddingTop, paddingEnd, paddingBottom)
            .withHiddenStatusBar(shouldHideStatusBar)
            .allowZooming(isZoomingAllowed)
            .allowSwipeToDismiss(isSwipeToDismissAllowed)
            .withTransitionFrom(targeImageView)
            .withImageChangeListener(::onImageChanged)
            .withDismissListener(::onViewerDismissed)
            .withDismissListener(::onViewerDismissed)

Also, you can take a look at the sample project for more information.

Usage with Fresco

If you use the Fresco library - check out the FrescoImageViewer which was also developed by our team.

License

Copyright (C) 2018 stfalcon.com

Licensed 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.

Comments
  • Usage in Java only Project

    Usage in Java only Project

    I have a java-only Android Project and I wanted to use this library but android studio is giving me error , 'Identitfier expected' in this line StfalconImageViewer.Builder(this, images ) Please provide a comprehensive documentation for its use in java project or include a java sample with this library's use it will be of great help

    opened by mr-mohit 12
  • Ensure backgroundView alpha is set to 1 if fade-in animation isn't run

    Ensure backgroundView alpha is set to 1 if fade-in animation isn't run

    At the end of ImageViewerView.open(), the function will call either animateOpen() or prepareViewsForViewer(). animateOpen() will cause the backgroundView alpha to be animated from 0 to 1, and then calls prepareViewsForViewer().

    The recent commit "Fix background blink on viewer opening" set backgroundView's initial alpha to 0. In the case where the fade-in animation is not run (e.g. by calling StfalconImageViewer.Builder.show(false) or by not calling the Builder's withTransitionFrom(), which causes animateOpen() to not run the fade-in animation), the alpha will not be changed from its initial 0, and the background will not be displayed at all.

    This commit sets the backgroundView alpha to 1 in prepareViewsForViewer(). In the case where the fade-in animation is not run, this ensures the background is visible. In the case where the animation is run, the animation will complete before prepareViewsForViewer() is called, the alpha will already be 1, and this additional set should have no effect.

    The incorrect behavior with .show(false) can be seen in the demo app in the "Rotation support" module when rotating the screen. This should also resolve #27 .

    opened by svank 10
  • Is it possible to programmaticaly change the curently displayed image (by pos)

    Is it possible to programmaticaly change the curently displayed image (by pos)

    The idea is to add a view overlay containing a horizontal thumbs list at the bottom of the screen. So when a user clicks a thumb from the list, the falcon image viewer updates the currently displayed image (maybe with a gesture-like animation as well).

    Is this possible? Maybe i can achieve it by updating the image list on the fly?

    question 
    opened by nickstamp93 5
  • ❓ How to add to android project ❓

    ❓ How to add to android project ❓

    The latest version badge doesn't work anymore

    Try this instead

    implementation 'com.github.omkar-tenkale:StfalconImageViewer:d11578fe3fd30c33a58b49978e3a9fd425291673'

    🌟 Or use

    implementation 'com.github.stfalcon-studio:StfalconImageViewer:master-SNAPSHOT'

    Use with maven { url 'https://jitpack.io' }in project build gradle in allprojects { repositories { ... block

    More at #69

    question 
    opened by omkar-tenkale 3
  • swipeDismissHandler has not been initialized

    swipeDismissHandler has not been initialized

    Describe the bug Great library! I'm just here to report a crash that's been popping up more and more on crashlytics in my production app that's coming from this library.

    To Reproduce I'm not sure how to reproduce, but I suspect it's a bug how the swipe dismiss handler is being initialized. Most recent crash was on a Galaxy J7 Crown running Android 9. I've seen a similar crash with "lateinit property transitionImageAnimator has not been initialized at com.stfalcon.imageviewer.viewer.view.ImageViewerView.dispatchTouchEvent(ImageViewerView.kt:155)" and can file a separate bug if needed.

    Fatal Exception: kotlin.UninitializedPropertyAccessException: lateinit property swipeDismissHandler has not been initialized at com.stfalcon.imageviewer.viewer.view.ImageViewerView.close$imageviewer_release(ImageViewerView.kt:205) at com.stfalcon.imageviewer.viewer.dialog.ImageViewerDialog.onDialogKeyEvent(ImageViewerDialog.kt:83) at com.stfalcon.imageviewer.viewer.dialog.ImageViewerDialog.access$onDialogKeyEvent(ImageViewerDialog.kt:27) at com.stfalcon.imageviewer.viewer.dialog.ImageViewerDialog$1.onKey(ImageViewerDialog.kt:47) at android.app.Dialog.dispatchKeyEvent(Dialog.java:965) at androidx.appcompat.app.AppCompatDialog.superDispatchKeyEvent(AppCompatDialog.java:201) at androidx.appcompat.app.AppCompatDialog$1.superDispatchKeyEvent(AppCompatDialog.java:48) at androidx.core.view.KeyEventDispatcher.dispatchKeyEvent(KeyEventDispatcher.java:84) at androidx.appcompat.app.AppCompatDialog.dispatchKeyEvent(AppCompatDialog.java:207) at androidx.appcompat.view.WindowCallbackWrapper.dispatchKeyEvent(WindowCallbackWrapper.java:59) at androidx.appcompat.app.AppCompatDelegateImpl$AppCompatWindowCallback.dispatchKeyEvent(AppCompatDelegateImpl.java:2814) at com.android.internal.policy.DecorView.dispatchKeyEvent(DecorView.java:586) at android.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent(ViewRootImpl.java:6119) at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:5974) at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5427) at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:5480) at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:5446) at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:5605) at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:5454) at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:5662) at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5427) at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:5480) at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:5446) at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:5454) at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5427) at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:5480) at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:5446) at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:5605) at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:5454) at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:5662) at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5427) at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:5480) at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:5446) at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:5454) at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5427) at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:5480) at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:5446) at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:5605) at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:5454) at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:5662) at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5427) at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:8504) at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:8424) at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:8377) at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:8619) at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:198) at android.os.MessageQueue.nativePollOnce(MessageQueue.java) at android.os.MessageQueue.next(MessageQueue.java:326) at android.os.Looper.loop(Looper.java:181) at android.app.ActivityThread.main(ActivityThread.java:7156) at java.lang.reflect.Method.invoke(Method.java) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:975)

    Expected behavior Don't crash

    bug 
    opened by matthewkrueger 3
  • WindowLeaked exception on rotate screen

    WindowLeaked exception on rotate screen

    Describe the bug A WindowLeaked exception is thrown when rotating the screen. The AlertDialog within ImageViewerDialog is not disposed.

    To Reproduce Steps to reproduce the behavior:

    1. Open the ImageViewerDialog for a set of images
    2. Rotate the device
    3. See error:

    E/WindowManager: android.view.WindowLeaked: at android.view.ViewRootImpl.(ViewRootImpl.java:511) at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:346) at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:93) at android.app.Dialog.show(Dialog.java:329) at com.stfalcon.imageviewer.viewer.dialog.ImageViewerDialog.show(ImageViewerDialog.kt:57) at com.stfalcon.imageviewer.StfalconImageViewer.show(StfalconImageViewer.java:63) at com.stfalcon.imageviewer.StfalconImageViewer$Builder.show(StfalconImageViewer.java:316) at com.stfalcon.imageviewer.StfalconImageViewer$Builder.show(StfalconImageViewer.java:305)

    Expected behavior The exception should not be thrown and the ImageViewer objects should be cleared/dismissed when onPause is called for the starting activity

    A dismiss function in ImageViewerDialog should include the dismisal of the AlertDialog object

    bug 
    opened by freakdudette 3
  • somthing wrong with the jitpack or the package i don't know

    somthing wrong with the jitpack or the package i don't know

    Could not HEAD 'https://jitpack.io/com/github/stfalcon/stfalcon-imageviewer/1.0.1/stfalcon-imageviewer-1.0.1.pom'. Received status code 521 from server:

    it seems like the jitpack is down or something but this is the only package that is affected so far

    question 
    opened by stefanusayudha 2
  • Background color not showing when withTransitionFrom(null)

    Background color not showing when withTransitionFrom(null)

    Problem Background color is not showing when withTransitionFrom(imageView) is set to withTransitionFrom(null) To Reproduce Steps to reproduce the behavior:

    1. Set the viewer background color .withBackgroundColor(Color.BLACK)
    2. Set the viewer method .withTransitionFrom(targetImageView) to .withTransitionFrom(null)
    3. Click on any images in that has been set with the viewer
    4. See error that the background is not totally black

    Expected behavior Background color should be black.

    image

    bug 
    opened by adrianhartanto004 2
  • No image in viewer activity ..

    No image in viewer activity ..

    Viewer activity is created but no image to zoom in on. Works fine in sample code downloaded from github but fails to load image when a new android project is created and I add the library. Could you please point me in the right direction ..

    Steps to reproduce the behaviour :

    1. Create a new android kotlin project

    2. Update build.gradle(app) : minSDK version to 19, compileSdkVersion : 28

    3. Update build.gradle(app) //implementation 'com.android.support:appcompat-v7:28.0.0' api 'androidx.appcompat:appcompat:1.0.2' api 'androidx.transition:transition:1.0.1' implementation 'com.squareup.picasso:picasso:2.71828' implementation 'com.github.stfalcon:stfalcon-imageviewer:0.1.0'

    4. Include the following code at the end of onCreate function .. (same thing works fine in the sample code)

       StfalconImageViewer.Builder<String>(this, listOf("http://i.4cdn.org/h/1552306518047.png")) { view, image ->
           Picasso.get().load(image).into(view)
      
    bug 
    opened by sr1dh4r 2
  • Delete image with ImageViewer showing

    Delete image with ImageViewer showing

    The documentation tells us to use updateImages(images) However, I'm getting an error: Cannot resolve method updateImages

    delete_image.setOnClickListener(new View.OnClickListener() { @Override public void onClick(final View view) { //Confirm alert AlertDialog alertDialog = new AlertDialog.Builder(mContext).create(); alertDialog.setMessage("Delete this image permanently?");

                    alertDialog.setButton(AlertDialog.BUTTON_POSITIVE, "Ok", new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int which) {
                            //
                            initialize_delete_image();
                            updateImages(imageList);
                        }
                    });
                    alertDialog.setButton(AlertDialog.BUTTON_NEGATIVE, "Cancel", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialogInterface, int i) {
    
                        }
                    });
    
                    alertDialog.show();
                }
            });
    
    question 
    opened by Alecckie 2
  • OnClickListener on Overlay buttons not working

    OnClickListener on Overlay buttons not working

    I have an overlay with a few options: Share,Delete I set onclick listener as below but the buttons dont respond to click. Instead, the options disappear from the screen as they would when you click on the Imageviewer.

    @Override public void onClick(View view) {

                    // Inflate the layout for this
                    LayoutInflater inflater = LayoutInflater.from(mContext);
                    final View frescoView = inflater.inflate(R.layout.activity_image_options, null);
    
                    new StfalconImageViewer.Builder<>(mContext, imageList, new ImageLoader<Decode_images>() {
                        @Override
                        public void loadImage(ImageView imageView, Decode_images image) {
                            //Usage with picasso... you can use glide too
                            Picasso.get().load(URL_UploadPath+image.getResource_name()).into(imageView);
    
                        }
                    })
                    .withStartPosition(position)
                    .withOverlayView(frescoView)
                    .withImageChangeListener(new OnImageChangeListener() {
                        @Override
                        public void onImageChange(final int position) {
                            //Get actual pic name
                            pic_name=imageList.get(position).getResource_name();
                            pic_position=position;
    
                            //Set onclick listeners to the overlay buttons
                            make_cover = frescoView.findViewById(R.id.make_cover);
                            share_image = frescoView.findViewById(R.id.share_image);
                            delete_image = frescoView.findViewById(R.id.delete_image);
    
                            **make_cover.setOnClickListener(new View.OnClickListener() {
                                @Override
                                public void onClick(View view) {
                                    //Confirm alert
                                    AlertDialog alertDialog = new AlertDialog.Builder(mContext).create();
                                    alertDialog.setMessage("Make this image house cover image?");
    
                                    alertDialog.setButton(AlertDialog.BUTTON_POSITIVE, "Ok", new DialogInterface.OnClickListener() {
                                        public void onClick(DialogInterface dialog, int which) {
                                            //
                                            initialize_house_cover();
                                        }
                                    });
                                    alertDialog.setButton(AlertDialog.BUTTON_NEGATIVE, "Cancel", new DialogInterface.OnClickListener() {
                                        @Override
                                        public void onClick(DialogInterface dialogInterface, int i) {
    
                                        }
                                    });
    
                                    alertDialog.show();
                                }
                            });**
    
    question 
    opened by Alecckie 2
  • Gradle implementation line is wrong.

    Gradle implementation line is wrong.

    Android does not download library with this gradle link implementation 'com.github.stfalcon:stfalcon-imageviewer:v1.0.1'

    Use this link. implementation 'com.github.stfalcon-studio:StfalconImageViewer:v1.0.1'

    bug 
    opened by danc243 4
  • Add ability to change dialog style to allow alert dialog customizations

    Add ability to change dialog style to allow alert dialog customizations

    This allows the ability to change alert dialog style and also provides the ability to set status bar color. Can even be set to transparent to allow and draw behind without translucency.

    Before:

    After:

    Usage:

      viewer = StfalconImageViewer.Builder<Poster>(this, Demo.posters, ::loadPosterImage)
          .withStartPosition(startPosition)
          .withHiddenStatusBar(false)
          .shouldStatusBarTransparent(true)
          .withDialogStyle(R.style.MyCustomStyle)
          .show()
    
    opened by meets7 0
  • Can't implement v1.0.1 via gradle (Fixed)

    Can't implement v1.0.1 via gradle (Fixed)

    Made changes to the ReadMe file where in if you copy the URL given in Readme file would give this error "Could not find com.github.stfalcon-studio:StfalconImageViewer:v1.0.1"

    opened by MohammedAbidNafi 1
  • Can't implement v1.0.1 via gradle

    Can't implement v1.0.1 via gradle

    Github URL has change so Jitpack goes now under implementation 'com.github.stfalcon-studio:StfalconImageViewer:v1.0.1'

    Anyway "Could not find com.github.stfalcon-studio:StfalconImageViewer:v1.0.1"

    bug 
    opened by acmeuno 3
Releases(v1.0.1)
Owner
Stfalcon LLC
We specialize in the development of large and medium-sized projects, mobile and web applications, portals with a complex and rich functionality.
Stfalcon LLC
πŸͺ Jetpack Compose animation library that allows you to implement animations such as shared element transition.

?? Jetpack Compose animation library that allows you to implement animations such as shared element transition.

Jaewoong Eum 504 Jan 2, 2023
3D animation examples for support-v4 Fragment transition.

FragmentAnimations Animation examples for support.v4.Fragment transition. These animations do not depends on any external libraries. Usage Example In

Keita Kajiwara 1.1k Dec 14, 2022
:octocat: ≑ DirectSelect is a selection widget with an ethereal, full-screen modal popup displaying the available choices when the widget is interact with.

DIRECT SELECT [JAVA] Selection widget with an ethereal, full-screen modal popup displaying the available choices We specialize in the designing and co

Ramotion 536 Nov 22, 2022
Splash screen demo that used with β€˜Splash Screenβ€˜ API on Android 12.

Splash Screen Feature Splash screen demo that used with Splash Screen API on Android 12. ?? Screenshot Default splash screen Splash screen with animat

Ellison Chan 60 Nov 16, 2022
Android library for swipable gestures

Swipper Android Library for custom views to control brightness , volume and seek through swipable gestures . These views could easily replace the conv

Mobile Development Group 105 Dec 30, 2022
Android library which makes playing with sensor events & detecting gestures a breeze.

Sensey Android library which makes playing with sensor events & detecting gestures a breeze. The library is built for simplicity and ease of use. It e

Nishant Srivastava 2.7k Dec 29, 2022
Android library to control Transition animates. A simple way to create a interactive animation.

TransitionPlayer Android library to control Transition animates. A simple way to create a interactive animation. Demo1 SimpleTransition Code: ....

ζž—ζ³•ι‘« 1.2k Dec 17, 2022
Android library to control Transition animates. A simple way to create a interactive animation.

TransitionPlayer Android library to control Transition animates. A simple way to create a interactive animation. Demo1 SimpleTransition Code: ....

ζž—ζ³•ι‘« 1.2k Dec 17, 2022
Animated-splash-screen - Animate your Splash Screen using Lottie files.

Animated Splash Screen This small project shows how you can add animation into your android projects or create beautiful looking Splash Screen or Laun

Aashish Ace 0 Jan 2, 2022
Simple tool which help you to implement activity and fragment transition for pre-Lollipop devices.

PreLollipopTransition Simple tool which help you to implement activity and fragment transition for pre-Lollipop devices. Download In your app build.gr

Takahiro Menju 1.3k Nov 28, 2022
This is a simple util to create Activity transition animation

TransitionHelper This is a simple util to create Activity transition animation API compatible with Android 2.2+ δΈ­ζ–‡θ―΄ζ˜Ž Screenshots How to use 1.startAct

ImmortalZ 1.6k Dec 12, 2022
Image-search - An Image search android app with offline support

image-search Image search app built using bing image search API via paging 3. Fe

Suraj Vaishnav 3 Feb 17, 2022
Allows the easy creation of animated transition effects when the state of Android UI has changed

android-transition Android-Transition allows the easy creation of view transitions that reacts to user inputs. The library is designed to be general e

Kai 615 Nov 14, 2022
Android Transition animations explanation with examples.

UNMAINTAINED No maintainance is intended. The content is still valid as a reference but it won't contain the latest new stuff Android Transition Frame

Luis G. Valle 13.6k Dec 28, 2022
Lightweight Android library for cool activity transition animations

Bungee min SDK 16 (Android Jellybean 4.1) written in Java A lightweight, easy-to-use Android library that provides awesome activity transition animati

Dean Spencer 172 Nov 18, 2022
ArcAnimator helps to create arc transition animation: 2.3.+

ArcAnimator ArcAnimator helps to create arc transition animation: 14+ | ArcAnimator Demo | TransitionLoop Demo* *TransitionLoop Prototype by Min-Sang

Asyl Isakov 1.2k Dec 20, 2022
A Photo Editor library with simple, easy support for image editing using paints,text,filters,emoji and Sticker like stories.

PhotoEditor A Photo Editor library with simple, easy support for image editing using Paints, Text, Filters, Emoji and Sticker like stories. Features D

Burhanuddin Rashid 3.6k Jan 9, 2023
πŸ­πŸš€πŸ’— Tutorials about animations with Animators, Animated Vector Drawables, Shared Transitions, and more

?????? Tutorials about animations with Animators, Animated Vector Drawables, Shared Transitions, and more

Smart Tool Factory 696 Dec 28, 2022
Chandrasekar Kuppusamy 799 Nov 14, 2022