{"id":13428055,"url":"https://github.com/dev-labs-bg/transitioner","last_synced_at":"2025-05-16T04:04:05.995Z","repository":{"id":61494634,"uuid":"113546314","full_name":"dev-labs-bg/transitioner","owner":"dev-labs-bg","description":"A library for dynamic view-to-view transitions","archived":false,"fork":false,"pushed_at":"2020-04-24T14:12:27.000Z","size":22367,"stargazers_count":2055,"open_issues_count":0,"forks_count":142,"subscribers_count":64,"default_branch":"master","last_synced_at":"2025-04-08T14:08:11.537Z","etag":null,"topics":["android","android-library","animation","dynamic","keyframe","keyframe-animation","keyframes","kotlin","library","transition","transitioner","view"],"latest_commit_sha":null,"homepage":null,"language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dev-labs-bg.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-12-08T07:39:39.000Z","updated_at":"2025-04-07T12:12:49.000Z","dependencies_parsed_at":"2022-10-19T22:15:44.803Z","dependency_job_id":null,"html_url":"https://github.com/dev-labs-bg/transitioner","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dev-labs-bg%2Ftransitioner","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dev-labs-bg%2Ftransitioner/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dev-labs-bg%2Ftransitioner/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dev-labs-bg%2Ftransitioner/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dev-labs-bg","download_url":"https://codeload.github.com/dev-labs-bg/transitioner/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254464891,"owners_count":22075570,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["android","android-library","animation","dynamic","keyframe","keyframe-animation","keyframes","kotlin","library","transition","transitioner","view"],"created_at":"2024-07-31T01:00:45.035Z","updated_at":"2025-05-16T04:04:05.974Z","avatar_url":"https://github.com/dev-labs-bg.png","language":"Kotlin","funding_links":[],"categories":["Libraries","开源库","Kotlin"],"sub_categories":["UI"],"readme":"![logo](https://raw.githubusercontent.com/dev-labs-bg/transitioner/master/logo.png)\n\n[![License: MIT](https://img.shields.io/badge/license-MIT-a31f34.svg?style=flat-square)](https://opensource.org/licenses/MIT) [![Download](https://img.shields.io/badge/download-1.3-6db33f.svg?style=flat-square\u0026label=version)](https://bintray.com/radoslav/maven/transitioner/1.3/link) [![Twitter URL](https://img.shields.io/badge/twitter-%40devlabsbg-1DA1F2.svg?style=flat-square\u0026logo=twitter)](http://twitter.com/devlabsbg)\n\nTransitioner provides easy, dynamic and adjustable animations between two views with nested children.\n\n\n\u003cimg src=\"https://github.com/dev-labs-bg/transitioner/blob/master/preview1.gif\" width=\"600\"\u003e\n\nApp design feature [here](https://www.uplabs.com/posts/ios-weather-app-animation-interface).\n## Usage\n\nFirst you need to create a Transitioner object containing your original and ending views:\n\n```kotlin\nval transition = Transitioner(original_view, ending_view)\n```\n  \nThe view pairs must have matching \"tag\" attributes so that they can be bound together:\n\n```xml\n\u003cConstraintLayout\n        android:id=\"@+id/original_view\"\n        android:tag=\"constrView\"\n        ...\u003e\n\n        \u003cTextView\n            android:id=\"@+id/text\"\n            android:tag=\"firstView\"\n            .../\u003e\n\u003c/ConstraintLayout\u003e\n\n\u003cConstraintLayout\n        android:id=\"@+id/ending_view\"\n        android:tag=\"constrView\"\n        android:visibility=\"invisible\"\n        ...\u003e\n\n        \u003cEditText\n            android:id=\"@+id/text3\"\n            android:tag=\"firstView\"\n            .../\u003e\n \u003c/ConstraintLayout\u003e\n```\n\nI recommend you hide the second view layout, since it's only used as a placeholder for the end destination.\nThe views can be of any type, you can mix and match them, the two layouts can have a different number of views and nested layouts are 100% supported. The only things to keep in mind are:\n\n-  all views which you would want to match together must have the same tag attribute in both layouts\n\n-  all unmatched views will remain at their original place inside the original layout\n\n-  the second layout is just a placeholder. It doesn't hold any logic, it only shows where the original layout should move to.\n\n### Basic Usage\n\n```kotlin\n transition.setProgress(0.5f)\n //or\n transition.setProgress(50)\n```\n\n### Additional methods and tweaks\n```kotlin\ntransition.duration = 500\n\ntransition.interpolator = AccelerateDecelerateInterpolator()\n\ntransition.animateTo(percent = 0f)\n\ntransition.onProgressChanged {\n//triggered on every progress change of the transition\n    seekBar.progress = (it * 100).toInt()\n    }\n    \nval progress: Float = transition.currentProgress\n\n```\n\nHere is a preview of a simple application made using this library\n\n![Preview](https://raw.githubusercontent.com/dev-labs-bg/transitioner/master/preview.gif)\n\nThis effect can be reproduced by placing the \"Transitioner.setProgress(Float)\" function inside a onTouch or a onProgressChanged method.\n\n\n## Download\n\n### Manually\n\nThe recommended way to download is to copy [the single library class file](https://github.com/dev-labs-bg/transitioner/blob/master/transitioner/src/main/java/bg/devlabs/transitioner/Transitioner.kt) and use it in your application.\n\n### Gradle\n\n```gradle\ndependencies {\n  compile 'bg.devlabs.transitioner:transitioner:\u003clatest_version\u003e'\n}\n ```\n\n## Getting help\n\nDev Labs  [@devlabsbg](https://twitter.com/devlabsbg)\n\nRadoslav Yankov [@rado__yankov](https://twitter.com/rado__yankov)\n\n\n\n\n\nUnder [MIT License](https://gitlab.com/SimonaStoyanova/flying-fab/blob/master/LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdev-labs-bg%2Ftransitioner","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdev-labs-bg%2Ftransitioner","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdev-labs-bg%2Ftransitioner/lists"}