开源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>
阅读全文
0 0
- 开源sidemenu学习笔记
- ionic3学习笔记(五)-sidemenu的实现
- SideMenu侧滑菜单栏
- ReactNative之SideMenu
- iOS中SideMenu侧边栏的实现,简易速成
- Android——SideMenu侧滑菜单的实现
- 关于ionic3里sidemenu与tabs结合使用的一些理解。
- 学习笔记?
- 学习笔记
- 学习笔记
- 学习笔记
- 学习笔记
- 学习笔记
- 学习笔记
- 学习笔记
- 学习笔记
- 学习笔记
- 学习笔记
- 【旧资料整理】C\C++ main()函数是需要int型返回值的
- 《深入理解java虚拟机》读书笔记——jvm内存区域
- Java中JSON字符串与java对象的互换
- ARP协议以及获取MAC脚本
- 详解SDR/DDR/DDR2/SDRAM的功能及异同
- 开源sidemenu学习笔记
- POJ 2305 Basic remains 笔记
- 018. Spring 声明式事务管理(注解)
- 常用线程池和调度类
- hibernate与mybatis对比
- Server IPC version 9 cannot communicate with client version 4
- mysql可扩展性
- 端口分类调研
- 多线程经常使用的3个关键字:synchronized、ReentrantLock、volatile