{"id":13789583,"url":"https://github.com/amir5121/arcView","last_synced_at":"2025-05-12T07:30:46.288Z","repository":{"id":53618238,"uuid":"275437869","full_name":"amir5121/arcView","owner":"amir5121","description":null,"archived":false,"fork":false,"pushed_at":"2022-07-21T12:18:31.000Z","size":239,"stargazers_count":64,"open_issues_count":0,"forks_count":14,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-05-05T08:16:48.132Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"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/amir5121.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":"2020-06-27T19:14:30.000Z","updated_at":"2024-12-24T06:25:46.000Z","dependencies_parsed_at":"2022-09-15T05:11:23.615Z","dependency_job_id":null,"html_url":"https://github.com/amir5121/arcView","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/amir5121%2FarcView","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/amir5121%2FarcView/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/amir5121%2FarcView/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/amir5121%2FarcView/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/amir5121","download_url":"https://codeload.github.com/amir5121/arcView/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253695019,"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":[],"created_at":"2024-08-03T22:00:28.879Z","updated_at":"2025-05-12T07:30:45.996Z","avatar_url":"https://github.com/amir5121.png","language":"Kotlin","readme":"[![](https://jitpack.io/v/amir5121/arcView.svg)](https://jitpack.io/#amir5121/arcView)\n[![Android Arsenal]( https://img.shields.io/badge/Android%20Arsenal-ArcView-green.svg?style=flat )]( https://android-arsenal.com/details/1/8130 )\n\n# arcView\n\nArcView is an android library for showing list like an arc\n\n## Installation\n - Gradle\nAdd it in your root `build.gradle` at the end of repositories:\n    ```\n    allprojects {\n    \trepositories {\n    \t\t...\n    \t\tmaven { url 'https://jitpack.io' }\n    \t}\n    }\n    ```\n    add the dependency\n    ```\n    dependencies {\n\t        implementation 'com.github.amir5121:arcView:TAG'\n\t}\n    ```\n - [More ways to add it](https://jitpack.io/#amir5121/arcView/)\n\n## Usage\n\n![gif](https://media.giphy.com/media/jrzFqaxhIKyjTzIA4B/giphy.gif)\n\n`layout.xml`\n```\n\u003c?xml version=\"1.0\" encoding=\"utf-8\"?\u003e\n\u003ccom.amir.arcview.VerticalArcContainer xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:id=\"@+id/include_buttons_scroll_view\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    android:layout_alignParentBottom=\"true\"\u003e\n\n    \u003c!--used to swap views in and out--\u003e\n    \u003ccom.amir.arcview.ArcScrollView\n        android:id=\"@+id/include_arc_buttons_temp_arc\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"150dp\"\n        android:background=\"@color/move_button_background\"\n        android:elevation=\"3dp\"\n        android:visibility=\"gone\"\n        app:findBestWidth=\"true\"\n        app:radius=\"550dp\"\n        app:stroke_width=\"50dp\" /\u003e\n\n    \u003ccom.amir.arcview.ArcScrollView\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:layout_centerHorizontal=\"true\"\n        android:background=\"#4499ff\"\n        android:elevation=\"5dp\"\n        app:findBestWidth=\"true\"\n        app:radius=\"400dp\"\n        app:stroke_width=\"50dp\"\u003e\n\n        \u003ccom.amir.arcview.ArcLinearLayout\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"match_parent\"\n            app:itemsOffset=\"7dp\"\n            app:useMinPadding=\"true\"\u003e\n\n            \u003cImageView\n                android:id=\"@+id/include_buttons_stroke\"\n                style=\"@style/EditActivityImageView\"\n                android:contentDescription=\"@string/app_name\"\n                android:src=\"@drawable/ic_stroke\" /\u003e\n\n            \u003c!--add a bunch of image--\u003e\n\n        \u003c/com.amir.arcview.ArcLinearLayout\u003e\n\n    \u003c/com.amir.arcview.ArcScrollView\u003e\n\n    \u003ccom.amir.arcview.ArcScrollView\n        android:id=\"@+id/activity_edit_image_move_container\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:background=\"@color/move_button_background\"\n        android:elevation=\"6dp\"\n        app:findBestWidth=\"true\"\n        app:radius=\"300dp\"\n        app:stroke_width=\"40dp\"\u003e\n\n        \u003ccom.amir.arcview.ArcLinearLayout\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"match_parent\"\n            app:itemsOffset=\"7dp\"\n            app:useMinPadding=\"true\"\u003e\n\n            \u003c!--you can put an empty view on each end if they won't reach the arc--\u003e\n            \u003cView\n                android:layout_width=\"25dp\"\n                android:layout_height=\"0dp\" /\u003e\n\n            \u003cImageView\n                android:id=\"@+id/activity_edit_image_move_align_top\"\n                style=\"@style/EditActivityImageView\"\n                android:contentDescription=\"@string/app_name\"\n                android:src=\"@drawable/ic_align_top\" /\u003e\n\n            \u003c!--add a bunch of image--\u003e\n\n        \u003c/com.amir.arcview.ArcLinearLayout\u003e\n\n    \u003c/com.amir.arcview.ArcScrollView\u003e\n\n    \u003ccom.amir.arcview.ArcScrollView\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:layout_centerHorizontal=\"true\"\n        android:background=\"#0088ff\"\n        android:elevation=\"9dp\"\n        app:findBestWidth=\"true\"\n        app:radius=\"100dp\"\n        app:stroke_width=\"50dp\"\u003e\n\n        \u003ccom.amir.arcview.ArcLinearLayout\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"match_parent\"\n            app:itemsOffset=\"7dp\"\n            app:useMinPadding=\"true\"\u003e\n\n            \u003cTextView\n                android:id=\"@+id/include_buttons_text_button\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:clickable=\"true\"\n                android:focusable=\"true\"\n                android:padding=\"5dp\"\n                android:text=\"@string/text\"\n                android:textColor=\"#fff\"\n                android:textSize=\"20sp\" /\u003e\n\n        \u003c/com.amir.arcview.ArcLinearLayout\u003e\n\n    \u003c/com.amir.arcview.ArcScrollView\u003e\n\n\u003c/com.amir.arcview.VerticalArcContainer\u003e\n```\n`MainActivity.kt`\n```\npackage com.amir.arclistview\n\nimport android.os.Bundle\nimport android.util.Log\nimport android.view.View\nimport androidx.appcompat.app.AppCompatActivity\nimport com.amir.arcview.ArcLinearLayout\nimport kotlinx.android.synthetic.main.activity_main.*\nimport kotlinx.android.synthetic.main.include_arc_button.*\n\nclass MainActivity : AppCompatActivity(), View.OnClickListener {\n    private val TAG: String = \"MainActivity\"\n    private lateinit var strokeArc: ArcLinearLayout\n    private lateinit var shadowArc: ArcLinearLayout\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n        setContentView(R.layout.activity_main)\n        kick_me.setOnClickListener(this)\n        kick_swapped.setOnClickListener(this)\n        include_buttons_stroke.setOnClickListener(this)\n        include_buttons_shadow.setOnClickListener(this)\n        strokeArc =\n            layoutInflater.inflate(\n                R.layout.stroke_arc_linear_layout,\n                include_arc_buttons_temp_arc,\n                false\n            ) as ArcLinearLayout\n        shadowArc =\n            layoutInflater.inflate(\n                R.layout.shadow_arc_linear_layout,\n                include_arc_buttons_temp_arc,\n                false\n            ) as ArcLinearLayout\n    }\n\n    override fun onClick(v: View?) {\n        when (v) {\n            kick_me -\u003e {\n                if (include_buttons_scroll_view.isKnockedIn) {\n                    include_buttons_scroll_view.knockout()\n                } else {\n                    include_buttons_scroll_view.knockIn()\n                }\n            }\n            kick_swapped -\u003e {\n                Log.wtf(TAG, \"onClick: swapped\")\n                include_arc_buttons_temp_arc.swapView(null)\n            }\n            include_buttons_shadow -\u003e {\n                include_arc_buttons_temp_arc.swapView(shadowArc)\n            }\n            include_buttons_stroke -\u003e {\n                include_arc_buttons_temp_arc.swapView(strokeArc)\n            }\n        }\n    }\n}\n```\n![gif](https://media.giphy.com/media/j1hUT1JJkpjDsizDgK/giphy.gif)\n```\n\u003c?xml version=\"1.0\" encoding=\"utf-8\"?\u003e\n\u003ccom.amir.arcview.ArcScrollView xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"200dp\"\n    android:layout_alignParentBottom=\"true\"\n    android:layout_centerHorizontal=\"true\"\n    android:background=\"#b71c1c\"\n    android:elevation=\"5dp\"\n    app:radius=\"250dp\"\n    app:stroke_width=\"200dp\"\u003e\n\n    \u003ccom.amir.arcview.ArcLinearLayout\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"match_parent\"\n        app:itemsOffset=\"7dp\"\n        app:useMinPadding=\"true\"\u003e\n\n        \u003cImageView\n            android:id=\"@+id/include_buttons_stroke\"\n            style=\"@style/EditActivityImageView\"\n            android:contentDescription=\"@string/app_name\"\n            android:src=\"@drawable/ic_stroke\" /\u003e\n\n        \u003cImageView\n            android:id=\"@+id/include_buttons_shadow\"\n            style=\"@style/EditActivityImageView\"\n            android:contentDescription=\"@string/app_name\"\n            android:src=\"@drawable/ic_shadow\" /\u003e\n\n        \u003c!--add a bunch of image--\u003e\n\n    \u003c/com.amir.arcview.ArcLinearLayout\u003e\n\n\u003c/com.amir.arcview.ArcScrollView\u003e\n\n```\n\n## API\n### styleables\n    ArcScrollView\n        radius: dimension = defines the radius of the drawn circle\n        stroke_width: dimension = defines how much of the circle should be visible\n        findBestWidth: boolean = let the ArcScrollView decide the width\n\n    ArcLinearLayout\n        useMinPadding: boolean = add an extra padding to top and bottom of items if set to true won't add any extra padding\n        itemsOffset: dimension = how much the items in ArcLinearLayout should be offset from top of the arc\n\n## What need to be implemented?\nCurrently it doesn't support screen rotation. if this feature is asked for i will work on it.\n\n\n## Contributing\nPull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.\n\nPlease make sure to update tests as appropriate.\n\n## License\n[Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0)\n","funding_links":[],"categories":["Index"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Famir5121%2FarcView","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Famir5121%2FarcView","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Famir5121%2FarcView/lists"}