网上开源项目地址:https://github.com/ikimuhendis/LDrawer

效果图:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvQW5kZHJvaWRfTGFuWWFu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

build.gradle

  1. compile 'com.ikimuhendis:ldrawer:0.1'

colors.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <resources>
  3. <color name="ldrawer_color">#FFFFFF</color>
  4. <color name="actionbar_color">#bf360c</color>
  5. <color name="drawer_arrow_second_color">#303f9f</color>
  6. </resources>

styles.xml

  1. <resources>
  2.  
  3. <style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar">
  4. <item name="android:actionBarStyle">@style/ActionBar</item>
  5. </style>
  6.  
  7. <style name="ActionBar" parent="android:Widget.ActionBar">
  8. <item name="android:background">@color/actionbar_color</item>
  9. <item name="android:icon">@android:color/transparent</item>
  10. <item name="android:titleTextStyle">@style/ActionBar.TitleText</item>
  11. </style>
  12.  
  13. <style name="ActionBar.TitleText" parent="android:TextAppearance.Holo.Widget.ActionBar.Title">
  14. <item name="android:textColor">@android:color/white</item>
  15. <item name="android:textSize">18sp</item>
  16. </style>
  17.  
  18. </resources>

项目依赖开发包v4 : android.support.v4.app.ActionBarDrawerToggle,自己定义 DrawerArrowDrawable。ActionBarDrawerToggle

  1. import android.app.ActionBar;
  2. import android.app.Activity;
  3. import android.content.res.Configuration;
  4. import android.graphics.drawable.Drawable;
  5. import android.os.Build;
  6. import android.support.v4.view.GravityCompat;
  7. import android.support.v4.widget.DrawerLayout;
  8. import android.util.Log;
  9. import android.view.MenuItem;
  10. import android.view.View;
  11. import android.view.ViewGroup;
  12. import android.widget.ImageView;
  13.  
  14. import java.lang.reflect.Method;
  15.  
  16. import ldrawer.lanyan.com.ldrawer.R;
  17.  
  18. public class ActionBarDrawerToggle extends android.support.v4.app.ActionBarDrawerToggle {
  19.  
  20. private static final String TAG = ActionBarDrawerToggle.class.getName();
  21.  
  22. protected Activity mActivity;
  23. protected DrawerLayout mDrawerLayout;
  24.  
  25. protected int mOpenDrawerContentDescRes;
  26. protected int mCloseDrawerContentDescRes;
  27. protected DrawerArrowDrawable mDrawerImage;
  28. protected boolean animateEnabled;
  29.  
  30. public ActionBarDrawerToggle(Activity activity, DrawerLayout drawerLayout, int drawerImageRes, int openDrawerContentDescRes, int closeDrawerContentDescRes) {
  31. super(activity, drawerLayout, drawerImageRes, openDrawerContentDescRes, closeDrawerContentDescRes);
  32. }
  33.  
  34. public ActionBarDrawerToggle(Activity activity, DrawerLayout drawerLayout, DrawerArrowDrawable drawerImage, int openDrawerContentDescRes, int closeDrawerContentDescRes) {
  35. super(activity, drawerLayout, R.mipmap.ic_drawer, openDrawerContentDescRes, closeDrawerContentDescRes);
  36. mActivity = activity;
  37. mDrawerLayout = drawerLayout;
  38. mOpenDrawerContentDescRes = openDrawerContentDescRes;
  39. mCloseDrawerContentDescRes = closeDrawerContentDescRes;
  40. mDrawerImage = drawerImage;
  41. animateEnabled = true;
  42. }
  43.  
  44. public void syncState() {
  45. if (mDrawerImage == null) {
  46. super.syncState();
  47. return;
  48. }
  49. if (animateEnabled) {
  50. if (mDrawerLayout.isDrawerOpen(GravityCompat.START)) {
  51. mDrawerImage.setProgress(1.f);
  52. } else {
  53. mDrawerImage.setProgress(0.f);
  54. }
  55. }
  56. setActionBarUpIndicator();
  57. setActionBarDescription();
  58. }
  59.  
  60. public void setDrawerIndicatorEnabled(boolean enable) {
  61. if (mDrawerImage == null) {
  62. super.setDrawerIndicatorEnabled(enable);
  63. return;
  64. }
  65. setActionBarUpIndicator();
  66. setActionBarDescription();
  67. }
  68.  
  69. public boolean isDrawerIndicatorEnabled() {
  70. if (mDrawerImage == null) {
  71. return super.isDrawerIndicatorEnabled();
  72. }
  73. return true;
  74. }
  75.  
  76. public void onConfigurationChanged(Configuration newConfig) {
  77. if (mDrawerImage == null) {
  78. super.onConfigurationChanged(newConfig);
  79. return;
  80. }
  81. syncState();
  82. }
  83.  
  84. public boolean onOptionsItemSelected(MenuItem item) {
  85. return super.onOptionsItemSelected(item);
  86. }
  87.  
  88. @Override
  89. public void onDrawerSlide(View drawerView, float slideOffset) {
  90. if (mDrawerImage == null) {
  91. super.onDrawerSlide(drawerView, slideOffset);
  92. return;
  93. }
  94. if (animateEnabled) {
  95. mDrawerImage.setVerticalMirror(!mDrawerLayout.isDrawerOpen(GravityCompat.START));
  96. mDrawerImage.setProgress(slideOffset);
  97. }
  98. }
  99.  
  100. @Override
  101. public void onDrawerOpened(View drawerView) {
  102. if (mDrawerImage == null) {
  103. super.onDrawerOpened(drawerView);
  104. return;
  105. }
  106. if (animateEnabled) {
  107. mDrawerImage.setProgress(1.f);
  108. }
  109. setActionBarDescription();
  110. }
  111.  
  112. @Override
  113. public void onDrawerClosed(View drawerView) {
  114. if (mDrawerImage == null) {
  115. super.onDrawerClosed(drawerView);
  116. return;
  117. }
  118. if (animateEnabled) {
  119. mDrawerImage.setProgress(0.f);
  120. }
  121. setActionBarDescription();
  122. }
  123.  
  124. protected void setActionBarUpIndicator() {
  125. if (mActivity != null) {
  126. try {
  127. Method setHomeAsUpIndicator = ActionBar.class.getDeclaredMethod("setHomeAsUpIndicator",
  128. Drawable.class);
  129. setHomeAsUpIndicator.invoke(mActivity.getActionBar(), mDrawerImage);
  130. return;
  131. } catch (Exception e) {
  132. Log.e(TAG, "setActionBarUpIndicator error", e);
  133. }
  134.  
  135. final View home = mActivity.findViewById(android.R.id.home);
  136. if (home == null) {
  137. return;
  138. }
  139.  
  140. final ViewGroup parent = (ViewGroup) home.getParent();
  141. final int childCount = parent.getChildCount();
  142. if (childCount != 2) {
  143. return;
  144. }
  145.  
  146. final View first = parent.getChildAt(0);
  147. final View second = parent.getChildAt(1);
  148. final View up = first.getId() == android.R.id.home ?
  149.  
  150. second : first;
  151.  
  152. if (up instanceof ImageView) {
  153. ImageView upV = (ImageView) up;
  154. upV.setImageDrawable(mDrawerImage);
  155. }
  156. }
  157. }
  158.  
  159. protected void setActionBarDescription() {
  160. if (mActivity != null && mActivity.getActionBar() != null) {
  161. try {
  162. Method setHomeActionContentDescription = ActionBar.class.getDeclaredMethod(
  163. "setHomeActionContentDescription", Integer.TYPE);
  164. setHomeActionContentDescription.invoke(mActivity.getActionBar(),
  165. mDrawerLayout.isDrawerOpen(GravityCompat.START) ? mOpenDrawerContentDescRes : mCloseDrawerContentDescRes);
  166. if (Build.VERSION.SDK_INT <= 19) {
  167. mActivity.getActionBar().setSubtitle(mActivity.getActionBar().getSubtitle());
  168. }
  169. } catch (Exception e) {
  170. Log.e(TAG, "setActionBarUpIndicator", e);
  171. }
  172. }
  173. }
  174.  
  175. public void setAnimateEnabled(boolean enabled) {
  176. this.animateEnabled = enabled;
  177. }
  178.  
  179. public boolean isAnimateEnabled() {
  180. return this.animateEnabled;
  181. }
  182.  
  183. }
  1. import android.content.Context;
  2. import android.graphics.Canvas;
  3. import android.graphics.ColorFilter;
  4. import android.graphics.Paint;
  5. import android.graphics.Path;
  6. import android.graphics.PixelFormat;
  7. import android.graphics.Rect;
  8. import android.graphics.drawable.Drawable;
  9.  
  10. import ldrawer.lanyan.com.ldrawer.R;
  11.  
  12. public abstract class DrawerArrowDrawable extends Drawable {
  13. private static final float ARROW_HEAD_ANGLE = (float) Math.toRadians(45.0D);
  14. protected float mBarGap;
  15. protected float mBarSize;
  16. protected float mBarThickness;
  17. protected float mMiddleArrowSize;
  18. protected final Paint mPaint = new Paint();
  19. protected final Path mPath = new Path();
  20. protected float mProgress;
  21. protected int mSize;
  22. protected float mVerticalMirror = 1f;
  23. protected float mTopBottomArrowSize;
  24. protected Context context;
  25.  
  26. public DrawerArrowDrawable(Context context) {
  27. this.context = context;
  28. this.mPaint.setAntiAlias(true);
  29. this.mPaint.setColor(context.getResources().getColor(R.color.ldrawer_color));
  30. this.mSize = context.getResources().getDimensionPixelSize(R.dimen.ldrawer_drawableSize);
  31. this.mBarSize = context.getResources().getDimensionPixelSize(R.dimen.ldrawer_barSize);
  32. this.mTopBottomArrowSize = context.getResources().getDimensionPixelSize(R.dimen.ldrawer_topBottomBarArrowSize);
  33. this.mBarThickness = context.getResources().getDimensionPixelSize(R.dimen.ldrawer_thickness);
  34. this.mBarGap = context.getResources().getDimensionPixelSize(R.dimen.ldrawer_gapBetweenBars);
  35. this.mMiddleArrowSize = context.getResources().getDimensionPixelSize(R.dimen.ldrawer_middleBarArrowSize);
  36. this.mPaint.setStyle(Paint.Style.STROKE);
  37. this.mPaint.setStrokeJoin(Paint.Join.ROUND);
  38. this.mPaint.setStrokeCap(Paint.Cap.SQUARE);
  39. this.mPaint.setStrokeWidth(this.mBarThickness);
  40. }
  41.  
  42. protected float lerp(float paramFloat1, float paramFloat2, float paramFloat3) {
  43. return paramFloat1 + paramFloat3 * (paramFloat2 - paramFloat1);
  44. }
  45.  
  46. public void draw(Canvas canvas) {
  47. Rect localRect = getBounds();
  48. float f1 = lerp(this.mBarSize, this.mTopBottomArrowSize, this.mProgress);
  49. float f2 = lerp(this.mBarSize, this.mMiddleArrowSize, this.mProgress);
  50. float f3 = lerp(0.0F, this.mBarThickness / 2.0F, this.mProgress);
  51. float f4 = lerp(0.0F, ARROW_HEAD_ANGLE, this.mProgress);
  52. float f5 = 0.0F;
  53. float f6 = 180.0F;
  54. float f7 = lerp(f5, f6, this.mProgress);
  55. float f8 = lerp(this.mBarGap + this.mBarThickness, 0.0F, this.mProgress);
  56. this.mPath.rewind();
  57. float f9 = -f2 / 2.0F;
  58. this.mPath.moveTo(f9 + f3, 0.0F);
  59. this.mPath.rLineTo(f2 - f3, 0.0F);
  60. float f10 = (float) Math.round(f1 * Math.cos(f4));
  61. float f11 = (float) Math.round(f1 * Math.sin(f4));
  62. this.mPath.moveTo(f9, f8);
  63. this.mPath.rLineTo(f10, f11);
  64. this.mPath.moveTo(f9, -f8);
  65. this.mPath.rLineTo(f10, -f11);
  66. this.mPath.moveTo(0.0F, 0.0F);
  67. this.mPath.close();
  68. canvas.save();
  69. if (!isLayoutRtl())
  70. canvas.rotate(180.0F, localRect.centerX(), localRect.centerY());
  71. canvas.rotate(f7 * mVerticalMirror, localRect.centerX(), localRect.centerY());
  72. canvas.translate(localRect.centerX(), localRect.centerY());
  73. canvas.drawPath(this.mPath, this.mPaint);
  74. canvas.restore();
  75. }
  76.  
  77. public int getIntrinsicHeight() {
  78. return this.mSize;
  79. }
  80.  
  81. public int getIntrinsicWidth() {
  82. return this.mSize;
  83. }
  84.  
  85. public void setAlpha(int alpha) {
  86. this.mPaint.setAlpha(alpha);
  87. }
  88.  
  89. @Override
  90. public int getOpacity() {
  91. return PixelFormat.TRANSLUCENT;
  92. }
  93.  
  94. public abstract boolean isLayoutRtl();
  95.  
  96. public void setColorFilter(ColorFilter colorFilter) {
  97. this.mPaint.setColorFilter(colorFilter);
  98. }
  99.  
  100. public void setVerticalMirror(boolean mVerticalMirror) {
  101. this.mVerticalMirror = mVerticalMirror ? 1 : -1;
  102. }
  103.  
  104. public void setProgress(float paramFloat) {
  105. this.mProgress = paramFloat;
  106. invalidateSelf();
  107. }
  108.  
  109. public void setColor(int resourceId) {
  110. this.mPaint.setColor(context.getResources().getColor(resourceId));
  111. }
  112. }

測试代码:

  1. import android.app.ActionBar;
  2. import android.app.Activity;
  3. import android.content.Intent;
  4. import android.content.res.Configuration;
  5. import android.net.Uri;
  6. import android.os.Bundle;
  7. import android.support.v4.widget.DrawerLayout;
  8. import android.view.MenuItem;
  9. import android.view.View;
  10. import android.view.ViewGroup;
  11. import android.widget.AbsListView;
  12. import android.widget.AdapterView;
  13. import android.widget.ArrayAdapter;
  14. import android.widget.ImageView;
  15. import android.widget.ListView;
  16.  
  17. import com.ikimuhendis.ldrawer.ActionBarDrawerToggle;
  18. import com.ikimuhendis.ldrawer.DrawerArrowDrawable;
  19.  
  20. public class SampleActivity extends Activity {
  21.  
  22. private DrawerLayout mDrawerLayout;
  23. private ListView mDrawerList;
  24. private ActionBarDrawerToggle mDrawerToggle;
  25. private DrawerArrowDrawable drawerArrow;
  26. private boolean drawerArrowColor;
  27.  
  28. @Override
  29. protected void onCreate(Bundle savedInstanceState) {
  30. super.onCreate(savedInstanceState);
  31. setContentView(R.layout.activity_sample);
  32. ActionBar ab = getActionBar();
  33. ab.setDisplayHomeAsUpEnabled(true);
  34. ab.setHomeButtonEnabled(true);
  35.  
  36. mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
  37. mDrawerList = (ListView) findViewById(R.id.navdrawer);
  38.  
  39. drawerArrow = new DrawerArrowDrawable(this) {
  40. @Override
  41. public boolean isLayoutRtl() {
  42. return false;
  43. }
  44. };
  45. mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
  46. drawerArrow, R.string.drawer_open,
  47. R.string.drawer_close) {
  48.  
  49. public void onDrawerClosed(View view) {
  50. super.onDrawerClosed(view);
  51. invalidateOptionsMenu();
  52. }
  53.  
  54. public void onDrawerOpened(View drawerView) {
  55. super.onDrawerOpened(drawerView);
  56. invalidateOptionsMenu();
  57. }
  58. };
  59. mDrawerLayout.setDrawerListener(mDrawerToggle);
  60. mDrawerToggle.syncState();
  61.  
  62. String[] values = new String[]{
  63. "Stop Animation (Back icon)",
  64. "Stop Animation (Home icon)",
  65. "Start Animation",
  66. "Change Color",
  67. "GitHub Page",
  68. "Share",
  69. "Rate"
  70. };
  71. ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
  72. android.R.layout.simple_list_item_1, android.R.id.text1, values);
  73. mDrawerList.setAdapter(adapter);
  74. mDrawerList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
  75. @Override
  76. public void onItemClick(AdapterView<?> parent, View view,
  77. int position, long id) {
  78. switch (position) {
  79. case 0:
  80. mDrawerToggle.setAnimateEnabled(false);
  81. drawerArrow.setProgress(1f);
  82. break;
  83. case 1:
  84. mDrawerToggle.setAnimateEnabled(false);
  85. drawerArrow.setProgress(0f);
  86. break;
  87. case 2:
  88. mDrawerToggle.setAnimateEnabled(true);
  89. mDrawerToggle.syncState();
  90. break;
  91. case 3:
  92. if (drawerArrowColor) {
  93. drawerArrowColor = false;
  94. drawerArrow.setColor(R.color.ldrawer_color);
  95. } else {
  96. drawerArrowColor = true;
  97. drawerArrow.setColor(R.color.drawer_arrow_second_color);
  98. }
  99. mDrawerToggle.syncState();
  100. break;
  101. case 4:
  102. Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://github.com/IkiMuhendis/LDrawer"));
  103. startActivity(browserIntent);
  104. break;
  105. case 5:
  106. Intent share = new Intent(Intent.ACTION_SEND);
  107. share.setType("text/plain");
  108. share.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
  109. share.putExtra(Intent.EXTRA_SUBJECT,
  110. getString(R.string.app_name));
  111. share.putExtra(Intent.EXTRA_TEXT, getString(R.string.app_description) + "\n" +
  112. "GitHub Page : https://github.com/IkiMuhendis/LDrawer\n" +
  113. "Sample App : https://play.google.com/store/apps/details?
  114.  
  115. id=" +
  116. getPackageName());
  117. startActivity(Intent.createChooser(share,
  118. getString(R.string.app_name)));
  119. break;
  120. case 6:
  121. String appUrl = "https://play.google.com/store/apps/details?id=" + getPackageName();
  122. Intent rateIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(appUrl));
  123. startActivity(rateIntent);
  124. break;
  125. }
  126.  
  127. }
  128. });
  129. }
  130.  
  131. @Override
  132. public boolean onOptionsItemSelected(MenuItem item) {
  133. if (item.getItemId() == android.R.id.home) {
  134. if (mDrawerLayout.isDrawerOpen(mDrawerList)) {
  135. mDrawerLayout.closeDrawer(mDrawerList);
  136. } else {
  137. mDrawerLayout.openDrawer(mDrawerList);
  138. }
  139. }
  140. return super.onOptionsItemSelected(item);
  141. }
  142.  
  143. @Override
  144. protected void onPostCreate(Bundle savedInstanceState) {
  145. super.onPostCreate(savedInstanceState);
  146. mDrawerToggle.syncState();
  147. }
  148.  
  149. @Override
  150. public void onConfigurationChanged(Configuration newConfig) {
  151. super.onConfigurationChanged(newConfig);
  152. mDrawerToggle.onConfigurationChanged(newConfig);
  153. }
  154. }

布局文件:

  1. <android.support.v4.widget.DrawerLayout
  2. android:id="@+id/drawer_layout"
  3. xmlns:android="http://schemas.android.com/apk/res/android"
  4. android:layout_width="match_parent"
  5. android:layout_height="match_parent">
  6.  
  7. <RelativeLayout
  8. android:layout_width="match_parent"
  9. android:layout_height="wrap_content">
  10.  
  11. <TextView
  12. android:layout_width="wrap_content"
  13. android:layout_height="wrap_content"
  14. android:layout_centerInParent="true"
  15. android:text="@string/app_description"/>
  16.  
  17. </RelativeLayout>
  18.  
  19. <!-- The navigation drawer -->
  20. <ListView
  21. android:id="@+id/navdrawer"
  22. android:layout_width="@dimen/navdrawer_width"
  23. android:layout_height="match_parent"
  24. android:layout_gravity="start"
  25. android:background="@android:color/white"
  26. android:choiceMode="singleChoice"
  27. android:divider="@android:color/transparent"
  28. android:dividerHeight="0dp"
  29. android:drawSelectorOnTop="false">
  30. </ListView>
  31.  
  32. </android.support.v4.widget.DrawerLayout>

注意:假设是自己导入已有项目,复制图片时可能拷贝到的目录不是drawable(而是 R.mipmap.ic_drawer),那么
R.drawable.ic_drawer会报错找不到R

Android studio DrawerLayout的更多相关文章

  1. [Android] 升级了新的android studio之后 发生如下的报错,The following classes could not be instantiated:

    The following classes could not be instantiated:- android.support.v4.widget.DrawerLayout (Open Class ...

  2. Android下DrawerLayout的使用

    Android下DrawerLayout的使用 DrawerLayout见名知意,就是一个具有抽屉效果的布局,看看这个效果图,是不是感觉很炫酷 这么炫的效果其实不一定非要用类似一些SlidingMen ...

  3. 《Android Studio开发实战 从零基础到App上线》资源下载和内容勘误

    转载于:https://blog.csdn.net/aqi00/article/details/73065392 资源下载 下面是<Android Studio开发实战 从零基础到App上线&g ...

  4. Android Studio配置 AndroidAnnotations——Hi_博客 Android App 开发笔记

    以前用Eclicps 用习惯了现在 想学学 用Android Studio 两天的钻研终于 在我电脑上装了一个Android Studio 并完成了AndroidAnnotations 的配置. An ...

  5. Android Studio 多个编译环境配置 多渠道打包 APK输出配置

    看完这篇你学到什么: 熟悉gradle的构建配置 熟悉代码构建环境的目录结构,你知道的不仅仅是只有src/main 开发.生成环境等等环境可以任意切换打包 多渠道打包 APK输出文件配置 需求 一般我 ...

  6. Android Studio —— 重装 HAXM

    Android Studio -- 重装 HAXM 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 文中如有纰漏,欢迎大家留言指出. Android SDK 自带模拟器一直以慢.卡 ...

  7. android studio 使用 jni 编译 opencv 完整实例 之 图像边缘检测!从此在andrid中自由使用 图像匹配、识别、检测

    目录: 1,过程感慨: 2,运行环境: 3,准备工作: 4,编译 .so 5,遇到的关键问题及其解决方法 6,实现效果截图. (原创:转载声明出处:http://www.cnblogs.com/lin ...

  8. 使用 Android Studio 检测内存泄漏与解决内存泄漏问题

    本文在腾讯技术推文上 修改 发布. http://wetest.qq.com/lab/view/63.html?from=ads_test2_qqtips&sessionUserType=BF ...

  9. 【详细教程】论android studio中如何申请百度地图新版Key中SHA1值

    一.写在前面 现在越来越多的API接口要求都要求提供我们的项目SHA1值,开发版目前还要求不高,但是发布版是必定要求的.而目前定位在各大APP中也较为常见,当下主流的百度地图和高德地图都在申请的时候会 ...

随机推荐

  1. springMVC接受对象集合,name数组

    这两天开发遇到一个很常见的问题,即使自己一直没遇见过,不过之前看过是实现接受对象集合的代码,只不过没注意罢了 推荐一篇文章 直接贴代码吧 public class Person { private S ...

  2. 在phpWeChat中生成公众号 jssdk 各个参数(PHP)

    <?php //jsapipara $jsapipara=array(); $jsapipara['appid']=WECHAT_APPID; $jsapipara['noncestr']=cr ...

  3. 【BZOJ 2179】 2179: FFT快速傅立叶 (FFT)

    2179: FFT快速傅立叶 Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 3308  Solved: 1720 Description 给出两个n位 ...

  4. 【欧拉定理】BZOJ3884-上帝与集合的正确用法

    [题目大意] 求2^(2^(2^(2^(2^...)))) mod p. [思路] 蒟蒻在知道用欧拉做的前提下,对这题目瞪了好久没有明白,看了正解扑通一声跪下来orz直接搬运popoqqq大爷的吧反正 ...

  5. poj 2912 并查集(食物链加强版)

    题目:给出n个人玩剪刀石头布的游戏,其中有一个人是裁判,剩下的人分为3组,每一组的人只出某一种手型,裁判可以任意出.问是否能判断出哪个人是裁判 链接:点我 分分钟看吐血,先把食物链看懂吧 枚举裁判,然 ...

  6. JDBC中使用Preparement对象修改个人多账户密码

    在日常生活中,人们可能会遇到想同时修改自己所有账户的密码,这个时候再用批量处理已经不好使了,因为我们要处理的是某个人的多个账户,而不是所有人的,那么怎么才能实现呢?经过大量的测试,我写了一个单元测试代 ...

  7. Linux知识(5)----LINUX下GDB调试

    命令 解释 示例   file 加载被调试的可执行程序文件.因为一般都在被调试程序所在目录下执行GDB,因而文本名不需要带路径. (gdb) file gdb-sample     r c Run的简 ...

  8. URL资源跨域访问 跨域使用session信息

    SilverLight 出于对安全性的考虑默认情况下对URL的访问进行了严格的限制,只允许访问同一子域下的URL资源. 下表列出了Silverlight 2.0 中 URL 访问规则:   WebCl ...

  9. 工作流引擎activiti入门

    眼下最新的版本号是5.17 1.下载:activiti-5.17.0.zip http://activiti.org/download.html 2.解压activiti-5.17.0.zip 3.打 ...

  10. Java垃圾回收精粹 — Part4

    Java垃圾回收精粹分4个部分,本篇是第4部分.在第4部分里介绍了G1收集器.其他并发收集器以及垃圾收集监控和调优. Garbage First (G1) 收集器 G1 (-XX:+UseG1GC)收 ...