开源sidemenu学习笔记

先把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>



  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

telllong

你的鼓励是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值