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.RevealFrameLayoutandroid: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> <ScrollViewandroid: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"> <FrameLayoutandroid: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>运行结果:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。