{"id":13395914,"url":"https://github.com/balysv/material-menu","last_synced_at":"2025-05-14T10:11:06.766Z","repository":{"id":18494337,"uuid":"21690229","full_name":"balysv/material-menu","owner":"balysv","description":"Animations for Android L drawer, back, dismiss and check icons","archived":false,"fork":false,"pushed_at":"2024-06-11T07:51:24.000Z","size":1241,"stargazers_count":2472,"open_issues_count":10,"forks_count":501,"subscribers_count":105,"default_branch":"master","last_synced_at":"2025-04-03T02:06:06.596Z","etag":null,"topics":["android","animation","drawer","icon-states","icons","java","material-menu"],"latest_commit_sha":null,"homepage":"","language":"Java","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/balysv.png","metadata":{"files":{"readme":"README-1.0.md","changelog":"CHANGELOG.md","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":"2014-07-10T10:22:20.000Z","updated_at":"2025-03-23T03:32:56.000Z","dependencies_parsed_at":"2024-06-21T05:48:24.387Z","dependency_job_id":null,"html_url":"https://github.com/balysv/material-menu","commit_stats":null,"previous_names":[],"tags_count":20,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/balysv%2Fmaterial-menu","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/balysv%2Fmaterial-menu/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/balysv%2Fmaterial-menu/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/balysv%2Fmaterial-menu/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/balysv","download_url":"https://codeload.github.com/balysv/material-menu/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248154968,"owners_count":21056541,"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","drawer","icon-states","icons","java","material-menu"],"created_at":"2024-07-30T18:00:35.516Z","updated_at":"2025-04-10T03:44:19.923Z","avatar_url":"https://github.com/balysv.png","language":"Java","readme":"Material Menu\n===============\n\nThis document is a reference for versions up to 1.5.5 which are old and **unmaintained**. Please use version 2.0.0+ for latest features.\n\nIncluding in your project\n-------------------------\n\n\n```groovy\n// stock actionBar\ncompile 'com.balysv.materialmenu:material-menu:1.5.5'\n\n// Toolbar and ActionBarCompat-v22 (includes support-v7:22.0.x)\ncompile 'com.balysv.materialmenu:material-menu-toolbar:1.5.5'\n\n// actionBarCompat-v20 (up to support-v7:20.0.0 - does not support Toolbar)\ncompile 'com.balysv.materialmenu:material-menu-abc:1.5.5'\n\n// actionBarSherlock\ncompile 'com.balysv.materialmenu:material-menu-abs:1.5.5'\n```\n\nUsage\n-----\n\nThe library provides two wrappers of `MaterialMenuDrawable` that eases implementation into the ActionBar, NavigationDrawer slide interaction or into any other custom layout.\n\n### MaterialMenuView\n\nA plain old `View` that draws the icon and provides an API to manipulate its state.\n\nCustomisation is also available through attributes:\n\n```xml\napp:mm_color=\"color\"               // Color of drawable\napp:mm_visible=\"boolean\"        \t  // Visible\napp:mm_transformDuration=\"integer\" // Transformation animation duration\napp:mm_scale=\"integer\"             // Scale factor of drawable\napp:mm_strokeWidth=\"integer\"       // Stroke width of icons (can only be 1, 2 or 3)\napp:mm_rtlEnabled=\"boolean\"        // Enabled RTL layout support (flips all drawables)\napp:mm_iconState=\"enum\"            // Set the intial state of the drawable (burger, arrow, x or check)\n```\n\n### MaterialMenuIcon\n\nA POJO that initializes the drawable and replaces the ActionBar icon.\n\nJump to instructions for :\n- [ActionBar (stock, Sherlock, Compat)]( https://github.com/balysv/material-menu#use-as-action-bar-icon-stock-compat-or-sherlock)\n- [Toolbar](https://github.com/balysv/material-menu#use-in-toolbar)\n- [NavigationDrawer interaction ](https://github.com/balysv/material-menu#navigationdrawer-slide-interaction)\n\n## API\n\nThere are four icon states:\n\n```java\nBURGER, ARROW, X, CHECK\n```\n\nTo morph the drawable state\n\n```java\nMaterialMenu.animateState(IconState state)\n```\n    \nTo change the drawable state without animation\n\n```java\nMaterialMenu.setState(IconState state)\n```\n\nTo animate the drawable manually (i.e. on navigation drawer slide):\n\n```java\nMaterialMenu.setTransformationOffset(AnimationState state, float value)\n```\nTo hide or show the drawable:\n\n```java\nMaterialMenu.setVisible(boolean visible)\n```\n\nwhere `AnimationState` is one of `BURGER_ARROW, BURGER_X, ARROW_X, ARROW_CHECK, BURGER_CHECK, X_CHECK`\nand `value` is between `0` and `2`\n    \n**Note:** The current implementation resolves its state by current offset value. Make sure you use `offset` between `0` and `1` for forward animation and `1` and `2` for backwards to correctly save icon state on activity recreation.\n    \n### Customisation\n\n```java\n// change color\nMaterialMenu.setColor(int color)\n\n// change icon visibility\nMaterialMenu.setVisible(boolean visible)\n\n// change transformation animation duration\nMaterialMenu.setTransformationDuration(int duration)\n\n// change transformation interpolator\nMaterialMenu.setInterpolator(Interpolator interpolator)\n\n// set RTL layout support\nMaterialMenu.setRTLEnabled(boolean enabled)\n```\n    \n### Action Bar\n\n#### Use as Action Bar icon (stock, Compat or Sherlock)\n\nDepending on the `ActionBar` you use, use one of the following classes:\n`MaterialMenuIcon`, `MaterialMenuIconCompat` or `MaterialMenuIconSherlock`.\n\nIn your `Activity` add the following:\n\n```java\nprotected void onCreate(Bundle savedInstanceState) {\n    super.onCreate(savedInstanceState);\n    materialMenu = new MaterialMenuIcon(this, Color.WHITE, Stroke.THIN);\n}\n\nprotected void onPostCreate(Bundle savedInstanceState) {\n    super.onPostCreate(savedInstanceState);\n    materialMenu.syncState(savedInstanceState);\n}\n\nprotected void onSaveInstanceState(Bundle outState) {\n    super.onSaveInstanceState(outState);\n    materialMenu.onSaveInstanceState(outState);\n}\n\npublic boolean onOptionsItemSelected(MenuItem item) {\n    if (item.getId() == android.R.id.home) {\n        // Handle your drawable state here\n        materialMenu.animateState(newState);\n    }\n}\n```\n\n#### Use in Toolbar\n\nUse it as a standalone drawable. Note: you have to handle icon state yourself:\n\n```java\nprivate MaterialMenuDrawable materialMenu;\n\nprotected void onCreate(Bundle savedInstanceState) {\n    super.onCreate(savedInstanceState);\n    setContentView(R.layout.toolbar);\n    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);\n    setSupportActionBar(toolbar);\n    toolbar.setNavigationOnClickListener(new View.OnClickListener() {\n        @Override public void onClick(View v) {\n        // Handle your drawable state here\n        materialMenu.animateState(newState);\n        }\n    });\n    materialMenu = new MaterialMenuDrawable(this, Color.WHITE, Stroke.THIN);\n    toolbar.setNavigationIcon(materialMenu);\n}\n```\n\nOR\n\nUse `MaterialMenuIconToolbar` which handles saved state:\n\n```java\nprivate MaterialMenuIconToolbar materialMenu;\n\n@Override\nprotected void onCreate(Bundle savedInstanceState) {\n    super.onCreate(savedInstanceState);\n    setContentView(R.layout.toolbar);\n    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);\n    setSupportActionBar(toolbar);\n    toolbar.setNavigationOnClickListener(new View.OnClickListener() {\n        @Override public void onClick(View v) {\n        // Handle your drawable state here\n        materialMenu.animateState(newState);\n        }\n    });\n    materialMenu = new MaterialMenuIconToolbar(this, Color.WHITE, Stroke.THIN) {\n        @Override public int getToolbarViewId() {\n            return R.id.toolbar;\n        }\n    };\n}\n\n@Override\nprotected void onPostCreate(Bundle savedInstanceState) {\n    super.onPostCreate(savedInstanceState);\n    materialMenu.syncState(savedInstanceState);\n}\n\n@Override protected void onSaveInstanceState(Bundle outState) {\n    materialMenu.onSaveInstanceState(outState);\n    super.onSaveInstanceState(outState);\n}\n```\n\n#### Use in custom Action Bar view\n\nSimply add `MaterialMenuView` in your custom layout and register an `OnClickListener` to do the\ntransformations. \n\nSee [source of Demo][2] for details\n\n#### NavigationDrawer slide interaction\n\nImplement `MaterialMenu` into your ActionBar as described above and add a custom `DrawerListener`:\n\n```java\nprivate DrawerLayout drawerLayout;\nprivate boolean      isDrawerOpened;\nprivate MaterialMenuIcon materialMenu;\n\n@Override\nprotected void onCreate(Bundle savedInstanceState) {\n    super.onCreate(savedInstanceState);\n    materialMenu = new MaterialMenuIcon(this, Color.WHITE, Stroke.THIN); // or retrieve from your custom view, etc\n    drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);\n    drawerLayout.setDrawerListener(new DrawerLayout.SimpleDrawerListener() {\n        @Override\n        public void onDrawerSlide(View drawerView, float slideOffset) {\n            materialMenu.setTransformationOffset(\n                MaterialMenuDrawable.AnimationState.BURGER_ARROW,\n                isDrawerOpened ? 2 - slideOffset : slideOffset\n            );\n        }\n\n        @Override\n        public void onDrawerOpened(View drawerView) {\n            isDrawerOpened = true;\n        }\n\n        @Override\n        public void onDrawerClosed(View drawerView) {\n            isDrawerOpened = false;\n        }\n        \n        @Override\n        public void onDrawerStateChanged(int newState) {\n            if(newState == DrawerLayout.STATE_IDLE) {\n                if(isDrawerOpened) menu.setState(MaterialMenuDrawable.IconState.ARROW)\n                else menu.setState(MaterialMenuDrawable.IconState.BURGER)\n            }\n        }\n    });\n}\n\n\n@Override\nprotected void onPostCreate(Bundle savedInstanceState) {\n    super.onPostCreate(savedInstanceState);\n    isDrawerOpened = drawerLayout.isDrawerOpen(Gravity.START); // or END, LEFT, RIGHT\n    materialMenu.syncState(savedInstanceState);\n}\n\n@Override\nprotected void onSaveInstanceState(Bundle outState) {\n    super.onSaveInstanceState(outState);\n    materialMenu.onSaveInstanceState(outState);\n}\n```\n\nDeveloped By\n--------------------\nBalys Valentukevicius @ [Lemon Labs][1]\n\nLicense\n-----------\n\n```\nCopyright 2014 Balys Valentukevicius\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://www.apache.org/licenses/LICENSE-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\n[1]: http://www.lemonlabs.co\n[2]: https://github.com/balysv/material-menu/blob/master/demo/src/stock/java/com/balysv/materialmenu/demo/stock/CustomViewActivity.java\n[3]: http://gradleplease.appspot.com/\n","funding_links":[],"categories":["Index `(light-weight pages)`","Java","Android","Index","Libs","material-menu","\u003ca name=\"Menu \u0026 Drawer\"\u003eMenu \u0026 Drawer\u003c/a\u003e","Uncategorized"],"sub_categories":["Components","\u003cA NAME=\"Widget\"\u003e\u003c/A\u003eWidget","Personal Blog","Uncategorized"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbalysv%2Fmaterial-menu","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbalysv%2Fmaterial-menu","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbalysv%2Fmaterial-menu/lists"}