[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-7538":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":9,"language":10,"languages":9,"totalLinesOfCode":9,"stars":11,"forks":12,"watchers":13,"openIssues":14,"contributorsCount":14,"subscribersCount":14,"size":14,"stars1d":14,"stars7d":15,"stars30d":15,"stars90d":14,"forks30d":14,"starsTrendScore":14,"compositeScore":16,"rankGlobal":9,"rankLanguage":9,"license":17,"archived":18,"fork":18,"defaultBranch":19,"hasWiki":20,"hasPages":18,"topics":21,"createdAt":9,"pushedAt":9,"updatedAt":33,"readmeContent":34,"aiSummary":35,"trendingCount":14,"starSnapshotCount":14,"syncStatus":36,"lastSyncTime":37,"discoverSource":38},7538,"transitioner","dev-labs-bg\u002Ftransitioner","dev-labs-bg","A library for dynamic view-to-view transitions",null,"Kotlin",2051,143,64,0,1,59.08,"MIT License",false,"master",true,[22,23,24,25,26,27,28,29,30,31,5,32],"android","android-library","animation","dynamic","keyframe","keyframe-animation","keyframes","kotlin","library","transition","view","2026-06-12 04:00:34","![logo](https:\u002F\u002Fraw.githubusercontent.com\u002Fdev-labs-bg\u002Ftransitioner\u002Fmaster\u002Flogo.png)\n\n[![License: MIT](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Flicense-MIT-a31f34.svg?style=flat-square)](https:\u002F\u002Fopensource.org\u002Flicenses\u002FMIT) [![Download](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fdownload-1.3-6db33f.svg?style=flat-square&label=version)](https:\u002F\u002Fbintray.com\u002Fradoslav\u002Fmaven\u002Ftransitioner\u002F1.3\u002Flink) [![Twitter URL](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Ftwitter-%40devlabsbg-1DA1F2.svg?style=flat-square&logo=twitter)](http:\u002F\u002Ftwitter.com\u002Fdevlabsbg)\n\nTransitioner provides easy, dynamic and adjustable animations between two views with nested children.\n\n\n\u003Cimg src=\"https:\u002F\u002Fgithub.com\u002Fdev-labs-bg\u002Ftransitioner\u002Fblob\u002Fmaster\u002Fpreview1.gif\" width=\"600\">\n\nApp design feature [here](https:\u002F\u002Fwww.uplabs.com\u002Fposts\u002Fios-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\u002Foriginal_view\"\n        android:tag=\"constrView\"\n        ...>\n\n        \u003CTextView\n            android:id=\"@+id\u002Ftext\"\n            android:tag=\"firstView\"\n            ...\u002F>\n\u003C\u002FConstraintLayout>\n\n\u003CConstraintLayout\n        android:id=\"@+id\u002Fending_view\"\n        android:tag=\"constrView\"\n        android:visibility=\"invisible\"\n        ...>\n\n        \u003CEditText\n            android:id=\"@+id\u002Ftext3\"\n            android:tag=\"firstView\"\n            ...\u002F>\n \u003C\u002FConstraintLayout>\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 \u002F\u002For\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\u002F\u002Ftriggered 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:\u002F\u002Fraw.githubusercontent.com\u002Fdev-labs-bg\u002Ftransitioner\u002Fmaster\u002Fpreview.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:\u002F\u002Fgithub.com\u002Fdev-labs-bg\u002Ftransitioner\u002Fblob\u002Fmaster\u002Ftransitioner\u002Fsrc\u002Fmain\u002Fjava\u002Fbg\u002Fdevlabs\u002Ftransitioner\u002FTransitioner.kt) and use it in your application.\n\n### Gradle\n\n```gradle\ndependencies {\n  compile 'bg.devlabs.transitioner:transitioner:\u003Clatest_version>'\n}\n ```\n\n## Getting help\n\nDev Labs  [@devlabsbg](https:\u002F\u002Ftwitter.com\u002Fdevlabsbg)\n\nRadoslav Yankov [@rado__yankov](https:\u002F\u002Ftwitter.com\u002Frado__yankov)\n\n\n\n\n\nUnder [MIT License](https:\u002F\u002Fgitlab.com\u002FSimonaStoyanova\u002Fflying-fab\u002Fblob\u002Fmaster\u002FLICENSE).\n","Transitioner 是一个用于实现动态视图间过渡动画的库。它支持在两个视图之间创建易于使用、动态可调且适应性强的动画效果，适用于Android平台，并采用Kotlin语言编写。该库允许开发者通过简单的API调用来定义复杂的动画序列，包括关键帧动画等高级特性，同时完全支持嵌套布局。适用于需要提升用户体验的应用场景，如应用内页面切换、元素状态变化展示等，能够为用户提供流畅自然的视觉体验。",2,"2026-06-11 03:12:58","top_language"]