首页 > 系统 > Android > 正文

Android学习教程之分类侧滑菜单(5)

2019-12-12 04:36:37
字体:
来源:转载
供稿:网友

本文实例为大家分享了Android分类侧滑菜单的制作方法,供大家参考,具体内容如下

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>

运行结果:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持武林网。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表