{"adoption": {"forks": 366, "observed_at": "2026-08-28T04:06:14.070591+00:00", "stars": 2108}, "canonical_url": "https://ross.abutalabs.com/products/androidanimationexercise", "card": {"archived": false, "artifact_type": "learning-resource", "description": "Android 动画各种实现，包括帧动画、补间动画和属性动画的总结分享", "domain": ["mobile-development", "tutorials", "android-tools"], "enriched": true, "function": ["animation", "ui-components", "developer-tools"], "health_score": 95, "homepage": null, "language": "Java", "license": "Apache-2.0", "license_family": "permissive", "maturity": "active", "member_repos": ["REBOOTERS/AndroidAnimationExercise"], "name": "REBOOTERS/AndroidAnimationExercise", "platform": [], "pushed_at": "2026-08-14T02:11:51+00:00", "repo": "REBOOTERS/AndroidAnimationExercise", "stars": 2108, "tags": ["android-animation", "custom-view", "frame-animation", "tween-animation", "property-animation", "jetpack-compose", "gradle-plugin", "demo-app", "kotlin", "java", "android", "mobile"], "topics": ["android", "animation", "bitmap", "view", "viewpager", "gradle-plugin", "imitate", "gradle", "gradle-script", "gradle-plugin-development", "android-view", "asm", "transform", "apk", "coroutine", "coroutines-android", "motionlayout", "jetpack-android"], "urls": [], "use_cases": ["learn android animation techniques", "examples of frame tween and property animations", "imitate animations from popular apps like weibo or qq", "learn android custom view development", "study android gradle plugin and build instrumentation", "find jetpack compose animation examples", "reference for viewpager and activity transition animations"], "what_it_is": "An open-source Android demo app and learning resource collecting implementations of Android animations (frame, tween, and property animations), custom Views, and imitations of popular app effects. It also includes componentized modules, Jetpack Compose examples, and custom Gradle plugin/build-flow experiments.", "when_to_avoid": ["you need a production-ready animation library to drop into your app", "you target AGP 8.0+ and rely on the removed Transform API examples", "you need iOS, web, or non-Android UI animation solutions"], "when_to_choose": ["you are learning Android animation APIs from frame/tween to property animations", "you want runnable demo code for custom Views and app effect imitations", "you want to study componentization, ARouter, or Gradle plugin development on Android"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/androidanimationexercise", "repo": "REBOOTERS/AndroidAnimationExercise", "role": "main", "score": 76}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:06:14.070591+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T02:53:52.845022+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "77c113fd10d1dc997bce9321c7a1f2e5e8cf0806042ca069a854026b5855756a", "fetched_at": "2026-08-28T04:06:14.070591+00:00", "kind": "readme", "missing": false, "url": "https://github.com/REBOOTERS/AndroidAnimationExercise"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:06:14.070591+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T02:53:52.845022+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "77c113fd10d1dc997bce9321c7a1f2e5e8cf0806042ca069a854026b5855756a", "fetched_at": "2026-08-28T04:06:14.070591+00:00", "kind": "readme", "missing": false, "url": "https://github.com/REBOOTERS/AndroidAnimationExercise"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T02:53:52.845022+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "77c113fd10d1dc997bce9321c7a1f2e5e8cf0806042ca069a854026b5855756a", "fetched_at": "2026-08-28T04:06:14.070591+00:00", "kind": "readme", "missing": false, "url": "https://github.com/REBOOTERS/AndroidAnimationExercise"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:06:14.070591+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:06:14.070591+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:06:14.070591+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T02:53:52.845022+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "77c113fd10d1dc997bce9321c7a1f2e5e8cf0806042ca069a854026b5855756a", "fetched_at": "2026-08-28T04:06:14.070591+00:00", "kind": "readme", "missing": false, "url": "https://github.com/REBOOTERS/AndroidAnimationExercise"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:06:14.070591+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:06:14.070591+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T02:53:52.845022+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "77c113fd10d1dc997bce9321c7a1f2e5e8cf0806042ca069a854026b5855756a", "fetched_at": "2026-08-28T04:06:14.070591+00:00", "kind": "readme", "missing": false, "url": "https://github.com/REBOOTERS/AndroidAnimationExercise"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:06:14.070591+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:06:14.070591+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:06:14.070591+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T02:53:52.845022+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "77c113fd10d1dc997bce9321c7a1f2e5e8cf0806042ca069a854026b5855756a", "fetched_at": "2026-08-28T04:06:14.070591+00:00", "kind": "readme", "missing": false, "url": "https://github.com/REBOOTERS/AndroidAnimationExercise"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:06:14.070591+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:06:14.070591+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T02:53:52.845022+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "77c113fd10d1dc997bce9321c7a1f2e5e8cf0806042ca069a854026b5855756a", "fetched_at": "2026-08-28T04:06:14.070591+00:00", "kind": "readme", "missing": false, "url": "https://github.com/REBOOTERS/AndroidAnimationExercise"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T02:53:52.845022+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "77c113fd10d1dc997bce9321c7a1f2e5e8cf0806042ca069a854026b5855756a", "fetched_at": "2026-08-28T04:06:14.070591+00:00", "kind": "readme", "missing": false, "url": "https://github.com/REBOOTERS/AndroidAnimationExercise"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T02:53:52.845022+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "77c113fd10d1dc997bce9321c7a1f2e5e8cf0806042ca069a854026b5855756a", "fetched_at": "2026-08-28T04:06:14.070591+00:00", "kind": "readme", "missing": false, "url": "https://github.com/REBOOTERS/AndroidAnimationExercise"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T02:53:52.845022+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "77c113fd10d1dc997bce9321c7a1f2e5e8cf0806042ca069a854026b5855756a", "fetched_at": "2026-08-28T04:06:14.070591+00:00", "kind": "readme", "missing": false, "url": "https://github.com/REBOOTERS/AndroidAnimationExercise"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 97, "longevity": 100, "rhythm": 34}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 3677, "days_push": 20, "days_rel": 230, "gap_med": null, "n_releases_24m": 1}, "score": 76, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}