{"id":13789586,"url":"https://github.com/hoanganhtuan95ptit/DraggablePanel","last_synced_at":"2025-05-12T07:30:49.772Z","repository":{"id":154493804,"uuid":"180528103","full_name":"hoanganhtuan95ptit/DraggablePanel","owner":"hoanganhtuan95ptit","description":"Android library used to create an awesome Android UI based on a draggable element similar to the last YouTube New graphic component.","archived":false,"fork":false,"pushed_at":"2022-07-20T19:28:30.000Z","size":19099,"stargazers_count":115,"open_issues_count":4,"forks_count":24,"subscribers_count":6,"default_branch":"master","last_synced_at":"2024-11-18T04:33:48.212Z","etag":null,"topics":["android","animation","draggable","draggablepanel","library","youtube","youtube-anim","youtube-ui"],"latest_commit_sha":null,"homepage":"","language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/hoanganhtuan95ptit.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-04-10T07:37:22.000Z","updated_at":"2024-10-29T09:59:53.000Z","dependencies_parsed_at":null,"dependency_job_id":"ae8793d8-8121-4fa9-9387-dd76265dc90f","html_url":"https://github.com/hoanganhtuan95ptit/DraggablePanel","commit_stats":null,"previous_names":[],"tags_count":17,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hoanganhtuan95ptit%2FDraggablePanel","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hoanganhtuan95ptit%2FDraggablePanel/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hoanganhtuan95ptit%2FDraggablePanel/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hoanganhtuan95ptit%2FDraggablePanel/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hoanganhtuan95ptit","download_url":"https://codeload.github.com/hoanganhtuan95ptit/DraggablePanel/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253695024,"owners_count":21948800,"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","animation","draggable","draggablepanel","library","youtube","youtube-anim","youtube-ui"],"created_at":"2024-08-03T22:00:28.997Z","updated_at":"2025-05-12T07:30:48.456Z","avatar_url":"https://github.com/hoanganhtuan95ptit.png","language":"Kotlin","funding_links":[],"categories":["Index"],"sub_categories":[],"readme":"\n## Please switch to [DragView](https://github.com/tuanhav95/DragView), for the best support, thank you\n\n# DraggablePanel\n\n![Alt text](output/ezgif.com-video-to-gif.gif) | ![Alt text](output/Screenshot_20190417-173713.png)  | ![Alt text](output/Screenshot_20190417-173738.png) \n--- | --- | --- \n![Alt text](output/Screenshot_20190417-173732.png) | ![Alt text](output/Screenshot_20190417-173744.png)  | ![Alt text](output/Screenshot_20190417-173721.png) \n\n#### Download\n\n```java\n\n\tallprojects {\n\t\trepositories {\n\t\t\t...\n\t\t\tmaven { url 'https://jitpack.io' }\n\t\t}\n\t}\n    \n    \n    \tdependencies {\n\t        implementation 'com.github.hoanganhtuan95ptit:DraggablePanel:1.2.5'\n\t}\n```\n\n#### Using [Detail code java](https://github.com/hoanganhtuan95ptit/DraggablePanel/blob/master/example/src/main/java/com/hoanganhtuan95ptit/example/NormalActivity.kt)\n\n* Xml\n\n```java\n        \u003ccom.hoanganhtuan95ptit.draggable.DraggablePanel\n                android:id=\"@+id/draggablePanel\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"match_parent\"\n                app:height_when_max=\"300dp\"\n                app:height_when_min=\"80dp\"\n                app:margin_bottom_when_min=\"8dp\"\n                app:margin_edge_when_min=\"8dp\"\n                app:percent_when_middle=\"0.9\"\n                app:state=\"MIN\" /\u003e\n```\n\n![Alt text](output/height_when_max.png) | ![Alt text](output/height_when_min.png)\n--- | --- \n\n* Listener\n\n```java\n\n        draggablePanel.setDraggableListener(object : DraggablePanel.DraggableListener {\n            override fun onChangeState(state: DraggablePanel.State) {\n            }\n\n            override fun onChangePercent(percent: Float) {\n                alpha.alpha = 1 - percent\n            }\n\n        })\n```\n\n* Add frame\n\n```java\n        supportFragmentManager.beginTransaction().add(R.id.frameFirst, TopFragment()).commit() // add frame top\n        supportFragmentManager.beginTransaction().add(R.id.frameSecond, BottomFragment()).commit() // add frame bottom\n```\n\n![Alt text](output/addFrame.png)\n\n* Action\n\n```java\n        btnMax.setOnClickListener { draggablePanel.maximize() }// maximize\n        btnMin.setOnClickListener { draggablePanel.minimize() }//minimizeo\n        btnClose.setOnClickListener { draggablePanel.close() }//close\n```\n\n\n#### Custom [Detail code java](https://github.com/hoanganhtuan95ptit/DraggablePanel/blob/master/example/src/main/java/com/hoanganhtuan95ptit/example/CustomActivity.kt)\n\n* Custom\n```java\n        class DraggableSource @JvmOverloads constructor(\n                context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0\n        ) : DraggablePanel(context, attrs, defStyleAttr) {\n        \n            var mWidthWhenMax = 0\n        \n            var mWidthWhenMiddle = 0\n        \n            var mWidthWhenMin = 0\n        \n            init {\n                getFrameFirst().addView(inflate(R.layout.layout_top))\n                getFrameSecond().addView(inflate(R.layout.layout_bottom))\n            }\n        \n            override fun initFrame() {\n                mWidthWhenMax = width\n        \n                mWidthWhenMiddle = (width - mPercentWhenMiddle * mMarginEdgeWhenMin).toInt()\n        \n                mWidthWhenMin = mHeightWhenMin * 22 / 9\n        \n                super.initFrame()\n            }\n        \n            override fun refreshFrameFirst() {\n                super.refreshFrameFirst()\n        \n                val width = if (mCurrentPercent \u003c mPercentWhenMiddle) {\n                    (mWidthWhenMax - (mWidthWhenMax - mWidthWhenMiddle) * mCurrentPercent)\n                } else {\n                    (mWidthWhenMiddle - (mWidthWhenMiddle - mWidthWhenMin) * (mCurrentPercent - mPercentWhenMiddle) / (1 - mPercentWhenMiddle))\n                }\n        \n                frameTop.reWidth(width.toInt())\n            }\n        }\n```\n\n* Xml\n```java\n        \u003ccom.hoanganhtuan95ptit.example.custom.DraggableSource\n                android:id=\"@+id/draggablePanel\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"match_parent\"\n                app:height_when_max=\"300dp\"\n                app:height_when_min=\"80dp\"\n                app:margin_bottom_when_min=\"8dp\"\n                app:margin_edge_when_min=\"8dp\"\n                app:percent_when_middle=\"0.9\"\n                app:state=\"MIN\" /\u003e\n```\n\n* Code\n\n```java\n        draggablePanel.setDraggableListener(object : DraggablePanel.DraggableListener {\n            override fun onChangeState(state: DraggablePanel.State) {\n            }\n\n            override fun onChangePercent(percent: Float) {\n                alpha.alpha = 1 - percent\n                shadow.alpha = percent\n            }\n\n        })\n\n        supportFragmentManager.beginTransaction().add(R.id.frameTop, TopFragment()).commit()\n        supportFragmentManager.beginTransaction().add(R.id.frameBottom, BottomFragment()).commit()\n\n        btnMax.setOnClickListener { draggablePanel.maximize() }\n        btnMin.setOnClickListener { draggablePanel.minimize() }\n        btnClose.setOnClickListener { draggablePanel.close() }\n```\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhoanganhtuan95ptit%2FDraggablePanel","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhoanganhtuan95ptit%2FDraggablePanel","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhoanganhtuan95ptit%2FDraggablePanel/lists"}