开源sidemenu学习笔记

来源:互联网 发布:阿里妈妈淘宝联盟论坛 编辑:程序博客网 时间:2024/06/06 10:48

先把app.gradle配置好,红字部分是调用sidemenu需要用的库

apply plugin: 'com.android.application'repositories {    maven {        url "https://jitpack.io"    }}android {    compileSdkVersion 25    buildToolsVersion "25.0.3"    useLibrary 'org.apache.http.legacy'    aaptOptions{                cruncherEnabled = false                useNewCruncher = false            }    defaultConfig {        applicationId "com.lcmf.xll.recyclerviewdemo"        minSdkVersion 19        targetSdkVersion 25        versionCode 1        versionName "1.0"        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"    }    buildTypes {        release {            minifyEnabled false            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'        }    }    sourceSets{        main{            jniLibs.srcDirs = ['libs']        }    }}dependencies {    compile fileTree(dir: 'libs', include: ['*.jar'])    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {        exclude group: 'com.android.support', module: 'support-annotations'    })    compile 'com.android.support:appcompat-v7:25.3.1'    compile 'com.android.support.constraint:constraint-layout:1.0.2'    compile 'com.android.support:recyclerview-v7:25.3.1'    compile 'com.github.bumptech.glide:glide:3.7.0'    compile 'com.google.code.gson:gson:2.7'    compile 'com.yalantis:sidemenu:1.0'    compile 'com.github.ozodrukh:CircularReveal:1.0.4'    compile 'org.litepal.android:core:1.3.2'    compile files('libs/Sunflower.jar')    compile files('libs/Msc.jar')    testCompile 'junit:junit:4.12'}

新建一个自己的Activity

package com.lcmf.xll.recyclerviewdemo;import android.content.res.Configuration;import android.graphics.Color;import android.graphics.drawable.BitmapDrawable;import android.os.Bundle;import android.support.annotation.Nullable;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.animation.AccelerateInterpolator;import android.widget.LinearLayout;import com.lcmf.xll.recyclerviewdemo.fragment.ContentFragment;import java.util.ArrayList;import java.util.List;import io.codetail.animation.SupportAnimator;import io.codetail.animation.ViewAnimationUtils;import yalantis.com.sidemenu.interfaces.Resourceble;import yalantis.com.sidemenu.interfaces.ScreenShotable;import yalantis.com.sidemenu.model.SlideMenuItem;import yalantis.com.sidemenu.util.ViewAnimator;/** * Created by Administrator on 2017/6/23 0023. */public class LoadActivity extends ActionBarActivity implements ViewAnimator.ViewAnimatorListener{   private ViewAnimator viewAnimator;   private ContentFragment contentFragment;   private DrawerLayout drawerLayout;   private ActionBarDrawerToggle drawerToggle;   private List<SlideMenuItem> list = new ArrayList<>();   private int res = R.drawable.content_music;   private LinearLayout linearLayout;   @Override   protected void onCreate(@Nullable Bundle savedInstanceState) {      super.onCreate(savedInstanceState);      setContentView(R.layout.load_activity);      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);//    viewAnimator = new ViewAnimator<>(this,    new ArrayList<Resourceble>(),//          (LinearLayout) findViewById(R.id.left_drawer),//          contentFragment, drawerLayout);   }// @Override// public void onDrawerSlide(View drawerView, float slideOffset) {//    super.onDrawerSlide(drawerView, slideOffset);//    if (slideOffset > 0.6 && viewAnimator.getLinearLayout().getChildCount() == 0)//       viewAnimator.showMenuContent();// }// public void onDrawerClosed(View view) {//    super.onDrawerClosed(view);//    viewAnimator.getLinearLayout().removeAllViews();//    viewAnimator.getLinearLayout().invalidate();// }   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());      SupportAnimator animator = ViewAnimationUtils.createCircularReveal(view, 0, topPosition, 0, finalRadius);      animator.setInterpolator(new AccelerateInterpolator());      animator.setDuration(ViewAnimator.CIRCULAR_REVEAL_ANIMATION_DURATION);      findViewById(R.id.content_overlay).setBackgroundDrawable(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,名字懒得换了

package com.lcmf.xll.recyclerviewdemo.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.lcmf.xll.recyclerviewdemo.R;import yalantis.com.sidemenu.interfaces.ScreenShotable;/** * Created by Administrator on 2017/6/21 0021. */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;   }}

新建load_activity.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/conteiner_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="80dp"        android:layout_height="match_parent"        android:layout_gravity="start|bottom">        <LinearLayout            android:id="@+id/left_drawer"            android:orientation="vertical"            android:layout_width="80dp"            android:layout_height="wrap_content"            android:divider="@android:color/transparent"            android:dividerHeight="0dp"            android:background="@android:color/transparent">            <!-- Layout of Drawer -->        </LinearLayout>    </ScrollView></android.support.v4.widget.DrawerLayout>


再件一个资源文件

<?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>

新建menu_item_selector.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>

string.xml

<string name="drawer_open">Open</string><string name="drawer_close">Close</string><string name="action_settings">设置</string>

styles.xml

<resources><!-- Base application theme. --><style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">    <!--<item name="colorPrimary">@color/colorPrimary</item>-->    <!--<item name="colorPrimaryDark">@color/colorPrimaryDark</item>-->    <!--<item name="colorAccent">@color/colorAccent</item>--></style></resources>



原创粉丝点击