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

作者:天风隼 时间:2021-12-26 23:32: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>

运行结果:

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

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

标签:Android,侧滑菜单
0
投稿

猜你喜欢

  • jdk-logging log4j logback日志系统实现机制原理介绍

    2022-03-22 11:45:28
  • Java多线程中关于join方法的使用实例解析

    2023-08-22 21:47:29
  • Android编程判断当前应用是否在后台运行的方法示例

    2021-10-29 12:09:36
  • 简单了解Java编程中线程的创建与守护线程

    2023-11-25 06:59:52
  • C#前端验证和后台验证代码实例

    2023-09-17 00:21:29
  • Android获取SD卡路径及SDCard内存的方法

    2021-12-30 17:04:58
  • Android 蓝牙BLE开发完全指南

    2023-07-03 03:15:06
  • C#字符串内存分配与驻留池学习分享

    2022-07-02 12:11:29
  • C#实现自由组合本地缓存、分布式缓存和数据查询

    2021-06-13 00:56:11
  • .net的命名空间类库的简单介绍

    2023-01-19 17:56:27
  • Java实现按比抽奖功能

    2023-11-11 13:12:30
  • C# 动态调用WebService的示例

    2023-07-04 05:40:20
  • 详解Android通知栏沉浸式/透明化完整解决方案

    2023-09-06 03:59:11
  • 带你了解如何使用Spring基于ProxyFactoryBean创建AOP代理

    2022-04-28 09:17:37
  • WPF MVVM示例讲解

    2022-04-16 22:47:20
  • Android开发之android_gps定位服务简单实现

    2023-07-31 20:02:25
  • 两个例子了解java中的回调机制

    2023-07-12 21:12:46
  • 关于mybatis使用${}时sql注入的问题

    2023-04-18 03:29:40
  • spring-boot中使用spring-boot-devtools的实现代码

    2021-10-09 13:31:32
  • SpringAop实现原理及代理模式详解

    2023-04-23 21:28:41
  • asp之家 软件编程 m.aspxhome.com