[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-7346":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":15,"subscribersCount":15,"size":15,"stars1d":15,"stars7d":15,"stars30d":15,"stars90d":15,"forks30d":15,"starsTrendScore":15,"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":30,"readmeContent":31,"aiSummary":32,"trendingCount":15,"starSnapshotCount":15,"syncStatus":33,"lastSyncTime":34,"discoverSource":35},7346,"Spotlight","TakuSemba\u002FSpotlight","TakuSemba","Android Library that lights items for tutorials or walk-throughs etc...",null,"Kotlin",3663,365,45,26,0,59.69,"Apache License 2.0",false,"master",true,[22,23,24,25,26,27,28,29],"android","android-app","android-library","android-ui","java","spotlight","ui","ux","2026-06-12 04:00:33","# Spotlight\n\n\u003Cimg src=\"https:\u002F\u002Fgithub.com\u002FTakuSemba\u002FSpotlight\u002Fblob\u002Fmaster\u002Farts\u002Flogo_yello.png\" alt=\"alt text\" style=\"width:200;height:200\">\n\n![Build Status](https:\u002F\u002Fapp.bitrise.io\u002Fapp\u002Fbcf0d555e7b41eb2\u002Fstatus.svg?token=2wvl_JilEbg6HB3B1tfKpA&branch=master)\n![Download](https:\u002F\u002Fapi.bintray.com\u002Fpackages\u002Ftakusemba\u002Fmaven\u002Fspotlight\u002Fimages\u002Fdownload.svg)\n![License](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FLicense-Apache%202.0-blue.svg)\n![API](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FAPI-14%2B-brightgreen.svg?style=flat)\n\n## Gradle\n\n```groovy\ndependencies {\n    implementation 'com.github.takusemba:spotlight:x.x.x'\n}\n```\n\n\n## Usage\n\n```kt\nval spotlight = Spotlight.Builder(this)\n    .setTargets(firstTarget, secondTarget, thirdTarget ...)\n    .setBackgroundColor(R.color.spotlightBackground)\n    .setDuration(1000L)\n    .setAnimation(DecelerateInterpolator(2f))\n    .setContainer(viewGroup)\n    .setOnSpotlightListener(object : OnSpotlightListener {\n      override fun onStarted() {\n        Toast.makeText(this@MainActivity, \"spotlight is started\", Toast.LENGTH_SHORT).show()\n      }\n      override fun onEnded() {\n        Toast.makeText(this@MainActivity, \"spotlight is ended\", Toast.LENGTH_SHORT).show()\n      }\n    })\n    .build()         \n```\n\nIf you want to show Spotlight immediately, you have to wait until views are laid out.\n\n```kt\n\u002F\u002F with core-ktx method.\nview.doOnPreDraw { Spotlight.Builder(this)...start() }\n```\n\n\u003Cbr\u002F>\n\u003Cbr\u002F>\n\n\u003Cimg src=\"https:\u002F\u002Fgithub.com\u002FTakuSemba\u002FSpotlight\u002Fblob\u002Fmaster\u002Farts\u002FcustomTarget.gif\" align=\"left\" width=\"30%\">\n\n## Target\nCreate a Target to add Spotlight.\n\nTarget is a spot to be casted by Spotlight. You can add multiple targets to Spotlight.\n\n```kt\nval target = Target.Builder()\n    .setAnchor(100f, 100f)\n    .setShape(Circle(100f))\n    .setEffect(RippleEffect(100f, 200f, argb(30, 124, 255, 90)))\n    .setOverlay(layout)\n    .setOnTargetListener(object : OnTargetListener {\n      override fun onStarted() {\n        makeText(this@MainActivity, \"first target is started\", LENGTH_SHORT).show()\n      }\n      override fun onEnded() {\n        makeText(this@MainActivity, \"first target is ended\", LENGTH_SHORT).show()\n      }\n    })\n    .build()\n```\n\n\n\u003Cbr\u002F>\n\u003Cbr\u002F>\n\n## Start\u002FFinish Spotlight\n\n```kt\nval spotlight = Spotlight.Builder(this)...start()\n\nspotlight.finish()\n```\n\n## Next\u002FPrevious\u002FShow Target\n\n```kt\nval spotlight = Spotlight.Builder(this)...start()\n\nspotlight.next()\n\nspotlight.previous()\n\nspotlight.show(2)\n```\n\n## Custom Shape\n`Shape` defines how your target will look like.\n[Circle](https:\u002F\u002Fgithub.com\u002FTakuSemba\u002FSpotlight\u002Fblob\u002Fmaster\u002Fspotlight\u002Fsrc\u002Fmain\u002Fjava\u002Fcom\u002Ftakusemba\u002Fspotlight\u002Fshape\u002FCircle.kt) and [RoundedRectangle](https:\u002F\u002Fgithub.com\u002FTakuSemba\u002FSpotlight\u002Fblob\u002Fmaster\u002Fspotlight\u002Fsrc\u002Fmain\u002Fjava\u002Fcom\u002Ftakusemba\u002Fspotlight\u002Fshape\u002FRoundedRectangle.kt) shapes are already implemented, but if you want your custom shape, it's arhivable by implementing `Shape` interface.\n\n\n```kt\nclass CustomShape(\n    override val duration: Long,\n    override val interpolator: TimeInterpolator\n) : Shape {\n\n  override fun draw(canvas: Canvas, point: PointF, value: Float, paint: Paint) {\n    \u002F\u002F draw your shape here.\n  }\n}\n```\n\n## Custom Effect\n`Effect` allows you to decorates your target.\n[RippleEffect](https:\u002F\u002Fgithub.com\u002FTakuSemba\u002FSpotlight\u002Fblob\u002Fmaster\u002Fspotlight\u002Fsrc\u002Fmain\u002Fjava\u002Fcom\u002Ftakusemba\u002Fspotlight\u002Feffet\u002FRippleEffect.kt) and [FlickerEffect](https:\u002F\u002Fgithub.com\u002FTakuSemba\u002FSpotlight\u002Fblob\u002Fmaster\u002Fspotlight\u002Fsrc\u002Fmain\u002Fjava\u002Fcom\u002Ftakusemba\u002Fspotlight\u002Feffet\u002FFlickerEffect.kt) shapes are already implemented, but if you want your custom effect, it's arhivable by implementing `Effect` interface.\n\n\n```kt\nclass CustomEffect(\n    override val duration: Long,\n    override val interpolator: TimeInterpolator,\n    override val repeatMode: Int\n) : Effect {\n\n  override fun draw(canvas: Canvas, point: PointF, value: Float, paint: Paint) {\n    \u002F\u002F draw your effect here.\n  }\n}\n```\n\n## Sample\nClone this repo and check out the [app](https:\u002F\u002Fgithub.com\u002FTakuSemba\u002FSpotlight\u002Ftree\u002Fmaster\u002Fapp) module.\n\n## Author\n\n* **Taku Semba**\n    * **Github** - (https:\u002F\u002Fgithub.com\u002Ftakusemba)\n    * **Twitter** - (https:\u002F\u002Ftwitter.com\u002Ftakusemba)\n    * **Facebook** - (https:\u002F\u002Fwww.facebook.com\u002Ftakusemba)\n\n## Licence\n```\nCopyright 2017 Taku Semba.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n   http:\u002F\u002Fwww.apache.org\u002Flicenses\u002FLICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n```\n","Spotlight 是一个用于Android应用的库，旨在通过高亮显示界面元素来引导用户完成教程或功能介绍。它支持自定义高亮区域形状、动画效果以及背景颜色等，允许开发者轻松创建个性化的引导流程。核心功能包括设置多个目标点、自定义过渡动画、监听事件（如开始\u002F结束）等功能，并且提供了圆形和圆角矩形两种预设形状，同时支持开发者自定义形状。适用于需要向新用户提供应用程序功能介绍、操作指南或是任何需要突出显示特定UI组件以吸引用户注意的应用场景中。",2,"2026-06-11 03:11:51","top_language"]