这篇文章主要为大家详细介绍了 Android 学习教程之分类侧滑菜单的具体代码, 具有一定的参考价值,感兴趣的小伙伴们可以参考一下
Android 是一种基于 Linux 的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由 Google 公司和开放手机联盟领导及开发。尚未有统一中文名称,中国大陆地区较多人使用 "安卓" 或 "安致"。
classificmenuActivity.java 代码:
- package com.siso.crazyworld;
- import android.animation.Animator;
- import android.content.res.Configuration;
- import android.graphics.Color;
- import android.graphics.drawable.BitmapDrawable;
- import android.os.Bundle;
- import android.support.v4.widget.DrawerLayout;
- import android.support.v7.app.ActionBarActivity;
- import android.support.v7.app.ActionBarDrawerToggle;
- import android.support.v7.widget.Toolbar;
- import android.view.Menu;
- import android.view.MenuItem;
- import android.view.View;
- import android.view.ViewAnimationUtils;
- import android.view.animation.AccelerateInterpolator;
- import android.widget.LinearLayout;
- import com.siso.crazyworld.fragment.ContentFragment;
- import java.util.ArrayList;
- import java.util.List;
- import sidemenu.interfaces.Resourceble;
- import sidemenu.interfaces.ScreenShotable;
- import sidemenu.model.SlideMenuItem;
- import sidemenu.util.ViewAnimator;
- public class classificmenuActivity extends ActionBarActivity implements ViewAnimator.ViewAnimatorListener {
- private DrawerLayout drawerLayout;
- private ActionBarDrawerToggle drawerToggle;
- private List<SlideMenuItem> list = new ArrayList<>();
- private ContentFragment contentFragment;
- private ViewAnimator viewAnimator;
- private int res = R.drawable.content_music;
- private LinearLayout linearLayout;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_classificmenu);
- contentFragment = ContentFragment.newInstance(R.drawable.content_music);
- getSupportFragmentManager().beginTransaction()
- .replace(R.id.content_frame, contentFragment)
- .commit();
- drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
- drawerLayout.setScrimColor(Color.TRANSPARENT);
- linearLayout = (LinearLayout) findViewById(R.id.left_drawer);
- linearLayout.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- drawerLayout.closeDrawers();
- }
- });
- setActionBar();
- createMenuList();
- viewAnimator = new ViewAnimator<>(this, list, contentFragment, drawerLayout, this);
- }
- private void createMenuList() {
- SlideMenuItem menuItem0 = new SlideMenuItem(ContentFragment.CLOSE, R.drawable.icn_close);
- list.add(menuItem0);
- SlideMenuItem menuItem = new SlideMenuItem(ContentFragment.BUILDING, R.drawable.icn_1);
- list.add(menuItem);
- SlideMenuItem menuItem2 = new SlideMenuItem(ContentFragment.BOOK, R.drawable.icn_2);
- list.add(menuItem2);
- SlideMenuItem menuItem3 = new SlideMenuItem(ContentFragment.PAINT, R.drawable.icn_3);
- list.add(menuItem3);
- SlideMenuItem menuItem4 = new SlideMenuItem(ContentFragment.CASE, R.drawable.icn_4);
- list.add(menuItem4);
- SlideMenuItem menuItem5 = new SlideMenuItem(ContentFragment.SHOP, R.drawable.icn_5);
- list.add(menuItem5);
- SlideMenuItem menuItem6 = new SlideMenuItem(ContentFragment.PARTY, R.drawable.icn_6);
- list.add(menuItem6);
- SlideMenuItem menuItem7 = new SlideMenuItem(ContentFragment.MOVIE, R.drawable.icn_7);
- list.add(menuItem7);
- }
- private void setActionBar() {
- Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
- setSupportActionBar(toolbar);
- getSupportActionBar().setHomeButtonEnabled(true);
- getSupportActionBar().setDisplayHomeAsUpEnabled(true);
- drawerToggle = new ActionBarDrawerToggle(
- this, /* host Activity */
- drawerLayout, /* DrawerLayout object */
- toolbar, /* nav drawer icon to replace 'Up' caret */
- R.string.drawer_open, /* "open drawer" description */
- R.string.drawer_close /* "close drawer" description */
- ) {
- /** Called when a drawer has settled in a completely closed state. */
- public void onDrawerClosed(View view) {
- super.onDrawerClosed(view);
- linearLayout.removeAllViews();
- linearLayout.invalidate();
- }
- @Override
- public void onDrawerSlide(View drawerView, float slideOffset) {
- super.onDrawerSlide(drawerView, slideOffset);
- if (slideOffset > 0.6 && linearLayout.getChildCount() == 0)
- viewAnimator.showMenuContent();
- }
- /** Called when a drawer has settled in a completely open state. */
- public void onDrawerOpened(View drawerView) {
- super.onDrawerOpened(drawerView);
- }
- };
- drawerLayout.setDrawerListener(drawerToggle);
- }
- @Override
- protected void onPostCreate(Bundle savedInstanceState) {
- super.onPostCreate(savedInstanceState);
- drawerToggle.syncState();
- }
- @Override
- public void onConfigurationChanged(Configuration newConfig) {
- super.onConfigurationChanged(newConfig);
- drawerToggle.onConfigurationChanged(newConfig);
- }
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- getMenuInflater().inflate(R.menu.menu_main, menu);
- return true;
- }
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- if (drawerToggle.onOptionsItemSelected(item)) {
- return true;
- }
- switch (item.getItemId()) {
- case R.id.action_settings:
- return true;
- default:
- return super.onOptionsItemSelected(item);
- }
- }
- private ScreenShotable replaceFragment(ScreenShotable screenShotable, int topPosition) {
- this.res = this.res == R.drawable.content_music ? R.drawable.content_films : R.drawable.content_music;
- View view = findViewById(R.id.content_frame);
- int finalRadius = Math.max(view.getWidth(), view.getHeight());
- Animator animator = ViewAnimationUtils.createCircularReveal(view, 0, topPosition, 0, finalRadius);
- animator.setInterpolator(new AccelerateInterpolator());
- animator.setDuration(ViewAnimator.CIRCULAR_REVEAL_ANIMATION_DURATION);
- findViewById(R.id.content_overlay).setBackground(new BitmapDrawable(getResources(), screenShotable.getBitmap()));
- animator.start();
- ContentFragment contentFragment = ContentFragment.newInstance(this.res);
- getSupportFragmentManager().beginTransaction().replace(R.id.content_frame, contentFragment).commit();
- return contentFragment;
- }
- @Override
- public ScreenShotable onSwitch(Resourceble slideMenuItem, ScreenShotable screenShotable, int position) {
- switch (slideMenuItem.getName()) {
- case ContentFragment.CLOSE:
- return screenShotable;
- default:
- return replaceFragment(screenShotable, position);
- }
- }
- @Override
- public void disableHomeButton() {
- getSupportActionBar().setHomeButtonEnabled(false);
- }
- @Override
- public void enableHomeButton() {
- getSupportActionBar().setHomeButtonEnabled(true);
- drawerLayout.closeDrawers();
- }
- @Override
- public void addViewToContainer(View view) {
- linearLayout.addView(view);
- }
- }
fragment 文件夹下 ContentFragment.java 代码:
- package com.siso.crazyworld.fragment;
- import android.graphics.Bitmap;
- import android.graphics.Canvas;
- import android.os.Bundle;
- import android.support.annotation.Nullable;
- import android.support.v4.app.Fragment;
- import android.view.LayoutInflater;
- import android.view.View;
- import android.view.ViewGroup;
- import android.widget.ImageView;
- import com.siso.crazyworld.R;
- import sidemenu.interfaces.ScreenShotable;
- public class ContentFragment extends Fragment implements ScreenShotable {
- public static final String CLOSE = "Close";
- public static final String BUILDING = "Building";
- public static final String BOOK = "Book";
- public static final String PAINT = "Paint";
- public static final String CASE = "Case";
- public static final String SHOP = "Shop";
- public static final String PARTY = "Party";
- public static final String MOVIE = "Movie";
- private View containerView;
- protected ImageView mImageView;
- protected int res;
- private Bitmap bitmap;
- public static ContentFragment newInstance(int resId) {
- ContentFragment contentFragment = new ContentFragment();
- Bundle bundle = new Bundle();
- bundle.putInt(Integer.class.getName(), resId);
- contentFragment.setArguments(bundle);
- return contentFragment;
- }
- @Override
- public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
- super.onViewCreated(view, savedInstanceState);
- this.containerView = view.findViewById(R.id.container);
- }
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- res = getArguments().getInt(Integer.class.getName());
- }
- @Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container,
- Bundle savedInstanceState) {
- View rootView = inflater.inflate(R.layout.fragment_main, container, false);
- mImageView = (ImageView) rootView.findViewById(R.id.image_content);
- mImageView.setClickable(true);
- mImageView.setFocusable(true);
- mImageView.setImageResource(res);
- return rootView;
- }
- @Override
- public void takeScreenShot() {
- Thread thread = new Thread() {
- @Override
- public void run() {
- Bitmap bitmap = Bitmap.createBitmap(containerView.getWidth(),
- containerView.getHeight(), Bitmap.Config.ARGB_8888);
- Canvas canvas = new Canvas(bitmap);
- containerView.draw(canvas);
- ContentFragment.this.bitmap = bitmap;
- }
- };
- thread.start();
- }
- @Override
- public Bitmap getBitmap() {
- return bitmap;
- }
- }
activity_classificmenu.xml 内容:
- <android.support.v4.widget.DrawerLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/drawer_layout"
- android:layout_width="match_parent"
- android:layout_height="match_parent">
- <io.codetail.widget.RevealFrameLayout
- android:id="@+id/container_frame"
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent">
- <LinearLayout
- android:id="@+id/content_overlay"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical"/>
- <LinearLayout
- android:id="@+id/content_frame"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical"/>
- <android.support.v7.widget.Toolbar
- android:id="@+id/toolbar"
- android:layout_height="wrap_content"
- android:layout_width="match_parent"
- android:minHeight="?attr/actionBarSize"
- android:background="?attr/colorPrimary"/>
- </io.codetail.widget.RevealFrameLayout>
- <ScrollView
- android:id="@+id/scrollView"
- android:scrollbarThumbVertical="@android:color/transparent"
- android:layout_width="@dimen/sliding_menu_width"
- android:layout_height="match_parent"
- android:layout_gravity="start|bottom">
- <LinearLayout
- android:id="@+id/left_drawer"
- android:orientation="vertical"
- android:layout_width="@dimen/sliding_menu_width"
- android:layout_height="wrap_content"
- android:divider="@android:color/transparent"
- android:background="@android:color/transparent">
- </LinearLayout>
- </ScrollView>
- </android.support.v4.widget.DrawerLayout>
.xml 内容:
- <?xml version="1.0" encoding="utf-8" ?>
- <selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_pressed="true" android:drawable="@drawable/item_down"
- />
- <item android:state_selected="true" android:drawable="@drawable/item_down"
- />
- <item android:state_focused="true" android:drawable="@drawable/item_down"
- />
- <item android:drawable="@drawable/item_up" />
- </selector>
fragment_main.xml 内容:
- <?xml version="1.0" encoding="utf-8"?>
- <io.codetail.widget.RevealFrameLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent">
- <FrameLayout
- android:id="@+id/container"
- android:layout_width="match_parent"
- android:layout_height="match_parent">
- <ImageView
- android:scaleType="fitXY"
- android:id="@+id/image_content"
- android:src="@drawable/content_films"
- android:layout_width="match_parent"
- android:layout_height="match_parent"/>
- </FrameLayout>
- </io.codetail.widget.RevealFrameLayout>
strings.xml:
- <?xml version="1.0" encoding="utf-8" ?>
- <resources>
- <string name="app_name">
- CrazyWorld
- </string>
- <string name="action_settings">
- 设置
- </string>
- <string name="drawer_open">
- Open
- </string>
- <string name="drawer_close">
- Close
- </string>
- </resources>
styles.xml
- <resources>
- <!-- Base application theme. -->
- <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
- </style>
- </resources>
运行结果:
来源: http://www.phperz.com/article/17/0315/307146.html