zoukankan      html  css  js  c++  java
  • github上一款特别的侧滑

    知识分享:

    首先看图,我只是大自然的搬运工,想实现这种特效的请点击连接下载github地址忘掉了,。。。。http://download.csdn.net/detail/lj419855402/8602281

    主要实现代码,利用AS编译。

    package net.xpece.material.navigationdrawer.sample.ui;
    
    import android.annotation.SuppressLint;
    import android.content.res.Configuration;
    import android.graphics.drawable.Drawable;
    import android.os.Bundle;
    import android.support.v4.widget.DrawerLayout;
    import android.support.v7.app.ActionBarActivity;
    import android.support.v7.app.ActionBarDrawerToggle;
    import android.view.Gravity;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.Toast;
    
    import com.sqisland.android.sliding_pane_layout.CrossFadeSlidingPaneLayout;
    
    import net.xpece.material.navigationdrawer.NavigationDrawerUtils;
    import net.xpece.material.navigationdrawer.descriptors.BaseNavigationItemDescriptor;
    import net.xpece.material.navigationdrawer.descriptors.NavigationItemDescriptor;
    import net.xpece.material.navigationdrawer.descriptors.NavigationSectionDescriptor;
    import net.xpece.material.navigationdrawer.descriptors.SimpleNavigationItemDescriptor;
    import net.xpece.material.navigationdrawer.internal.Utils;
    import net.xpece.material.navigationdrawer.list.NavigationListFragmentCallbacks;
    import net.xpece.material.navigationdrawer.list.SupportCompactNavigationListFragment;
    import net.xpece.material.navigationdrawer.list.SupportNavigationListFragment;
    import net.xpece.material.navigationdrawer.sample.widget.ToggleNavigationItemDescriptor;
    import net.xpece.materialnavigationdrawersample.BuildConfig;
    import net.xpece.materialnavigationdrawersample.R;
    
    import java.util.ArrayList;
    import java.util.List;
    
    import butterknife.ButterKnife;
    import butterknife.InjectView;
    import butterknife.Optional;
    import timber.log.Timber;
    
    public class MainActivity extends ActionBarActivity implements NavigationListFragmentCallbacks {
    
    //  @InjectView(R.id.app_bar)
    //  Toolbar mToolbar;
    
      private static final List<NavigationSectionDescriptor> SECTIONS = new ArrayList<>();
      private static final NavigationSectionDescriptor PRIMARY_SECTION;
      private static final NavigationSectionDescriptor PINNED_SECTION;
    
      static {
        PRIMARY_SECTION = new NavigationSectionDescriptor()
            .addItem(new SimpleNavigationItemDescriptor(1).text("Goodbye").badge("Hello").sticky()
                .iconResource(R.drawable.ic_star_black_24dp)
                .activeColorResource(R.color.material_red_500)
                .badgeColorResource(R.color.material_red_500))
            .addItem(new SimpleNavigationItemDescriptor(2).text("Yes").badge("No").sticky()
                .iconResource(R.drawable.ic_star_black_24dp)
                .passiveColorResource(R.color.material_amber_500).iconColorAlwaysPassiveOn()
                .badgeColorResource(R.color.material_amber_500))
            .addItem(new SimpleNavigationItemDescriptor(3).text("Stop").badge("Go, go, go").sticky()
    //            .iconResource(R.drawable.ic_star_black_24dp)
                .iconResource(android.R.color.transparent)
                .activeColorResource(R.color.material_light_green_500)
                .badgeColorResource(R.color.material_light_green_500))
            .addItem(new SimpleNavigationItemDescriptor(4).text("Why").badge("I don't know").sticky()
                .iconResource(0)
                .activeColorResource(R.color.material_light_blue_500).iconColorAlwaysPassiveOn()
                .badgeColor(0));
        SECTIONS.add(PRIMARY_SECTION);
        NavigationSectionDescriptor section2 = new NavigationSectionDescriptor().heading("Want more?")
            .addItem(new ToggleNavigationItemDescriptor(8).checked(true));
        SECTIONS.add(section2);
        NavigationSectionDescriptor section3 = new NavigationSectionDescriptor()
            .addItem(new BaseNavigationItemDescriptor(6).text("Settings")
                .iconResource(R.drawable.ic_settings_black_24dp))
            .addItem(new BaseNavigationItemDescriptor(7).text("Help & feedback")
                .iconResource(R.drawable.ic_help_black_24dp));
        PINNED_SECTION = section3;
    
        if (BuildConfig.DEBUG) Timber.plant(new Timber.DebugTree());
      }
    
      @Optional
      @InjectView(R.id.drawer_layout)
      DrawerLayout mDrawerLayout;
    
      @Optional
      @InjectView(R.id.sliding_layout)
      CrossFadeSlidingPaneLayout mSlidingLayout;
    
      @Optional
      @InjectView(R.id.navigation_container)
      ViewGroup mNavigationContainer;
    
      @InjectView(R.id.content)
      View mContent;
    
      ActionBarDrawerToggle mDrawerToggle;
    
      SupportNavigationListFragment mNavFragment;
      SupportCompactNavigationListFragment mNavFragmentCompact;
    
      // retain this
      Long mSelectedItem;
    
      // so I can show new toast immediately
      Toast mToast = null;
    
      @SuppressLint("RtlHardcoded")
      @Override
      protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.inject(this);
    
        // only setup drawer layout if there is a drawer in current layout (on phones)
        if (mDrawerLayout != null) {
          // setup drawer toggle, because i use native Action Bar and nav drawer below it
          getSupportActionBar().setDisplayHomeAsUpEnabled(true);
          getSupportActionBar().setHomeButtonEnabled(true);
          mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, android.R.string.untitled, android.R.string.untitled);
          mDrawerLayout.setDrawerListener(mDrawerToggle);
    
          NavigationDrawerUtils.fixMinDrawerMargin(mDrawerLayout); // apply navigation margin fix
    
          // the following are correct the RIGHT drawer drops shadow to LEFT and vice versa
          mDrawerLayout.setDrawerShadow(R.drawable.mnd_shadow_left, Gravity.RIGHT);
          mDrawerLayout.setDrawerShadow(R.drawable.mnd_shadow_right, Gravity.LEFT);
        }
    
        // only setup sliding layout if there is one in current layout (on tablets)
        if (mSlidingLayout != null) {
          mSlidingLayout.setSliderFadeColor(0);
          mSlidingLayout.setShadowResourceLeft(R.drawable.mnd_shadow_left);
          mSlidingLayout.setShadowResourceRight(R.drawable.mnd_shadow_right);
          NavigationDrawerUtils.setProperNavigationDrawerWidth(mNavigationContainer);
    
          Drawable d = getResources().getDrawable(R.drawable.ic_menu_white_24dp);
          int c = Utils.getColor(getSupportActionBar().getThemedContext(), R.attr.colorControlNormal, 0);
          d = Utils.tintDrawable(d, c);
          getSupportActionBar().setDisplayHomeAsUpEnabled(true);
          getSupportActionBar().setHomeAsUpIndicator(d);
        }
    
        // on phones there is no compact version, so null check is in place
        mNavFragmentCompact = (SupportCompactNavigationListFragment) getSupportFragmentManager().findFragmentById(R.id.navigation_drawer_compact);
        if (mNavFragmentCompact != null) {
          List<NavigationSectionDescriptor> sections = new ArrayList<>();
          sections.add(PRIMARY_SECTION);
          sections.add(PINNED_SECTION);
          mNavFragmentCompact.setHeaderView(View.inflate(this, R.layout.mnd_custom_header_compact, null), false);
          mNavFragmentCompact.setSections(sections);
        }
    
        // since the fragment is defined in layout, i can call this safely in onCreate
        mNavFragment = (SupportNavigationListFragment) getSupportFragmentManager().findFragmentById(R.id.navigation_drawer);
        if (mNavFragment != null) {
          NavigationDrawerUtils.setProperNavigationDrawerWidth(mNavFragment.getView());
          // set up the nav fragment
          mNavFragment.setHeaderView(View.inflate(this, R.layout.mnd_custom_header, null), true);
          mNavFragment.setSections(SECTIONS);
          mNavFragment.setPinnedSection(PINNED_SECTION);
    
          mNavFragment.setBackgroundResource(R.drawable.a7x_aligned);
        }
    
        if (savedInstanceState == null) {
          mSelectedItem = 1l;
        } else {
          mSelectedItem = savedInstanceState.getLong("mSelectedItem");
        }
      }
    
      @Override
      protected void onPostCreate(Bundle savedInstanceState) {
        super.onPostCreate(savedInstanceState);
    
        if (mDrawerToggle != null) mDrawerToggle.syncState();
    
        if (savedInstanceState == null) {
          if (mNavFragment != null) mNavFragment.setSelectedItem(mSelectedItem);
          if (mNavFragmentCompact != null) mNavFragmentCompact.setSelectedItem(mSelectedItem);
        }
      }
    
      @Override
      public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
    
        if (mDrawerToggle != null) mDrawerToggle.onConfigurationChanged(newConfig);
      }
    
      @Override
      protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putLong("mSelectedItem", mSelectedItem);
      }
    
      @Override
      public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
      }
    
      @Override
      public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        // AUTOMATICALLY ONLY ON 4.1+ !!!
    
        int id = item.getItemId();
    
        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
          return true;
        } else if (id == android.R.id.home) {
          if (mDrawerToggle != null) return mDrawerToggle.onOptionsItemSelected(item);
          if (mSlidingLayout != null) {
            if (mSlidingLayout.isOpen()) mSlidingLayout.closePane();
            else mSlidingLayout.openPane();
            return true;
          }
        }
    
        return super.onOptionsItemSelected(item);
      }
    
      @Override
      public void onNavigationItemSelected(View view, int position, long id, NavigationItemDescriptor item) {
        if (mToast != null) mToast.cancel();
        mToast = Toast.makeText(this, "Item #" + id + " on position " + position + " selected!", Toast.LENGTH_SHORT);
        mToast.show();
    
        if (item != null && item.isSticky()) {
          // if it is sticky, save selected position and mark in all fragments
          mSelectedItem = id;
          if (mNavFragment != null) mNavFragment.setSelectedItem(id);
          if (mNavFragmentCompact != null) mNavFragmentCompact.setSelectedItem(id);
        } else {
    //      if (mNavFragment != null) mNavFragment.setSelectedItem(id);
    //      if (mNavFragmentCompact != null) mNavFragmentCompact.setSelectedItem(id);
        }
    
        if (id == 8) return; // custom toggle does not close the drawer
    
    //    if (mDrawerLayout != null) mDrawerLayout.closeDrawers(); // uncomment to close drawer on item selected
      }
    
    }
  • 相关阅读:
    Effective Java 03 Enforce the singleton property with a private constructor or an enum type
    Effective Java 02 Consider a builder when faced with many constructor parameters
    Effective Java 01 Consider static factory methods instead of constructors
    sencha touch 手势识别左右滑动
    sencha touch textarea 手机上不显示滚动条,且不能滚动
    IBM Worklight OutOfMemoryError: Java heap space 错误
    shopnc-setNcCookie-后台验证码
    shonc-聊天im工具配置
    ecstore开启发送邮件日志,并且排查邮件发布出去原因
    php上传导入文件 nginx-502错误
  • 原文地址:https://www.cnblogs.com/LIANQQ/p/4433514.html
Copyright © 2011-2022 走看看