转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/39670935。本文出自:【张鸿洋的博客】

1、概述

关于自己定义控件側滑已经写了两篇了~~今天决定把之前的单向改成双向,当然了。单纯的修改之前的代码也没意思。今天不仅会把之前的单向改为双向,还会多加入一种側滑效果,给大家带来若干种形态各异的双向側滑菜单,只是请放心。代码会非常简单~~然后依据这若干种。仅仅要你喜欢。相信你能够打造不论什么绚(bian)丽(tai)效果的双向側滑菜单~~

首先回想一下,之前写过的各种側滑菜单,为了不占领篇幅,就不贴图片了:

1、最普通的側滑效果。请參考:Android 自己定义控件打造史上最简单的側滑菜单

2、仿QQ5.0側滑效果,请參考:Android 高仿 QQ5.0 側滑菜单效果 自己定义控件来袭

3、菜单在内容之后的側滑效果,请參考:Android 高仿 QQ5.0 側滑菜单效果 自己定义控件来袭

2、目标效果

1、最普通的双向側滑

是不是非常模糊,嗯,没办法。电脑显卡弱。。。。

2、抽屉式双向側滑

3、菜单在内容之下的双向側滑

凑合看下,文章最后会提供源代码下载,大家能够安装体验一下~

全部的代码的内容区域都是一个ListView,两側菜单都包括button。主要的冲突都检測过~~~当然假设有bug在所难免,请直接留言;假设你攻克了某些未知bug,希望你也能够留言,也许能够帮助到其它人~~

以下就開始我们的代码了。

3、代码是最好的老师

1、布局文件

既然是双向菜单,那么我们的布局文件是这种:

  1. <com.zhy.view.BinarySlidingMenu xmlns:android="http://schemas.android.com/apk/res/android"
  2. xmlns:tools="http://schemas.android.com/tools"
  3. xmlns:zhy="http://schemas.android.com/apk/res/com.zhy.zhy_bin_slidingmenu02"
  4. android:id="@+id/id_menu"
  5. android:layout_width="wrap_content"
  6. android:layout_height="fill_parent"
  7. android:scrollbars="none"
  8. zhy:rightPadding="100dp" >
  9.  
  10. <LinearLayout
  11. android:layout_width="wrap_content"
  12. android:layout_height="fill_parent"
  13. android:orientation="horizontal" >
  14.  
  15. <include layout="@layout/layout_menu" />
  16.  
  17. <LinearLayout
  18. android:layout_width="fill_parent"
  19. android:layout_height="fill_parent"
  20. android:background="@drawable/eee"
  21. android:gravity="center"
  22. android:orientation="horizontal" >
  23.  
  24. <ListView
  25. android:id="@android:id/list"
  26. android:layout_width="fill_parent"
  27. android:layout_height="fill_parent" >
  28. </ListView>
  29. </LinearLayout>
  30.  
  31. <include layout="@layout/layout_menu2" />
  32. </LinearLayout>
  33.  
  34. </com.zhy.view.BinarySlidingMenu>

最外层是我们的自己定义的BinarySlidingMenu,内部一个水平方向的LinearLayout。然后是左边的菜单,内容区域。右边的菜单布局~~

关键就是我们的BinarySlidingMenu

2、BinarySlidingMenu的构造方法

  1. /**
  2. * 屏幕宽度
  3. */
  4. private int mScreenWidth;
  5.  
  6. /**
  7. * dp 菜单距离屏幕的右边距
  8. */
  9. private int mMenuRightPadding;
  10.  
  11. public BinarySlidingMenu(Context context, AttributeSet attrs, int defStyle)
  12. {
  13. super(context, attrs, defStyle);
  14. mScreenWidth = ScreenUtils.getScreenWidth(context);
  15.  
  16. TypedArray a = context.getTheme().obtainStyledAttributes(attrs,
  17. R.styleable.BinarySlidingMenu, defStyle, 0);
  18. int n = a.getIndexCount();
  19. for (int i = 0; i < n; i++)
  20. {
  21. int attr = a.getIndex(i);
  22. switch (attr)
  23. {
  24. case R.styleable.BinarySlidingMenu_rightPadding:
  25. // 默认50
  26. mMenuRightPadding = a.getDimensionPixelSize(attr,
  27. (int) TypedValue.applyDimension(
  28. TypedValue.COMPLEX_UNIT_DIP, 50f,
  29. getResources().getDisplayMetrics()));// 默觉得10DP
  30. break;
  31. }
  32. }
  33. a.recycle();
  34. }

我们在构造方法中。获取我们自己定义的一个属性rightPadding,然后赋值给我们的成员变量mMenuRightPadding;关于怎样自己定义属性參考側滑菜单的第一篇博文,这里就不赘述了。

3、onMeasure

onMeasure中肯定是对側滑菜单的宽度、高度等进行设置:

  1. @Override
  2. protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
  3. {
  4. /**
  5. * 显示的设置一个宽度
  6. */
  7. if (!once)
  8. {
  9.  
  10. mWrapper = (LinearLayout) getChildAt(0);
  11. mLeftMenu = (ViewGroup) mWrapper.getChildAt(0);
  12. mContent = (ViewGroup) mWrapper.getChildAt(1);
  13. mRightMenu = (ViewGroup) mWrapper.getChildAt(2);
  14.  
  15. mMenuWidth = mScreenWidth - mMenuRightPadding;
  16. mHalfMenuWidth = mMenuWidth / 2;
  17. mLeftMenu.getLayoutParams().width = mMenuWidth;
  18. mContent.getLayoutParams().width = mScreenWidth;
  19. mRightMenu.getLayoutParams().width = mMenuWidth;
  20.  
  21. }
  22. super.onMeasure(widthMeasureSpec, heightMeasureSpec);
  23.  
  24. }

能够看到我们分别给左側、右側的菜单设置了宽度(mScreenWidth - mMenuRightPadding);

宽度设置完毕以后,肯定就是定位了,把左边的菜单弄到左边去。右边的菜单放置到右边。中间依旧是我们的内容区域。那么请看onLayout方法~

4、onLayout

  1. @Override
  2. protected void onLayout(boolean changed, int l, int t, int r, int b)
  3. {
  4. super.onLayout(changed, l, t, r, b);
  5. if (changed)
  6. {
  7. // 将菜单隐藏
  8. this.scrollTo(mMenuWidth, 0);
  9. once = true;
  10. }
  11.  
  12. }

哈,出奇的简单。由于我们的内部是个横向的线性布局,所以直接把左側滑出去就可以~~定位也完毕了,那么此时应该到了我们的处理触摸了。

5、onTouchEvent

  1. @Override
  2. public boolean onTouchEvent(MotionEvent ev)
  3. {
  4. int action = ev.getAction();
  5. switch (action)
  6. {
  7. // Up时,进行推断,假设显示区域大于菜单宽度一半则全然显示。否则隐藏
  8. case MotionEvent.ACTION_UP:
  9. int scrollX = getScrollX();
  10. // 假设是操作左側菜单
  11. if (isOperateLeft)
  12. {
  13. // 假设影藏的区域大于菜单一半,则影藏菜单
  14. if (scrollX > mHalfMenuWidth)
  15. {
  16. this.smoothScrollTo(mMenuWidth, 0);
  17. // 假设当前左側菜单是开启状态,且mOnMenuOpenListener不为空。则回调关闭菜单
  18. if (isLeftMenuOpen && mOnMenuOpenListener != null)
  19. {
  20. // 第一个參数true:打开菜单,false:关闭菜单;第二个參数 0 代表左側;1代表右側
  21. mOnMenuOpenListener.onMenuOpen(false, 0);
  22. }
  23. isLeftMenuOpen = false;
  24.  
  25. } else
  26. // 关闭左側菜单
  27. {
  28. this.smoothScrollTo(0, 0);
  29. // 假设当前左側菜单是关闭状态。且mOnMenuOpenListener不为空。则回调打开菜单
  30. if (!isLeftMenuOpen && mOnMenuOpenListener != null)
  31. {
  32. mOnMenuOpenListener.onMenuOpen(true, 0);
  33. }
  34. isLeftMenuOpen = true;
  35. }
  36. }
  37.  
  38. // 操作右側
  39. if (isOperateRight)
  40. {
  41. // 打开右側側滑菜单
  42. if (scrollX > mHalfMenuWidth + mMenuWidth)
  43. {
  44. this.smoothScrollTo(mMenuWidth + mMenuWidth, 0);
  45. } else
  46. // 关闭右側側滑菜单
  47. {
  48. this.smoothScrollTo(mMenuWidth, 0);
  49. }
  50. }
  51.  
  52. return true;
  53. }
  54. return super.onTouchEvent(ev);
  55. }

依旧是简单~~~我们仅仅须要关注ACTION_UP,然后得到手指抬起后的scrollX,然后我们通过一个布尔值,推断用户如今操作是针对左側菜单,还是右側菜单?

假设是操作左側。那么推断scorllX是否超过了菜单宽度的一半,然后做相应的操作。

假设是操作右側,那么推断scrollX与 mHalfMenuWidth + mMenuWidth ( 注意下。右側菜单全然影藏的时候。scrollX 就等于 mMenuWidth ),然后做相应的操作。

我们还给左側的菜单加上了一个回调:

if (isLeftMenuOpen && mOnMenuOpenListener != null)
{
//第一个參数true:打开菜单,false:关闭菜单;第二个參数 0 代表左側。1代表右側
mOnMenuOpenListener.onMenuOpen(false, 0);
}

扫一眼我们的回调接口:

  1. /**
  2. * 回调的接口
  3. * @author zhy
  4. *
  5. */
  6. public interface OnMenuOpenListener
  7. {
  8. /**
  9. *
  10. * @param isOpen true打开菜单。false关闭菜单
  11. * @param flag 0 左側, 1右側
  12. */
  13. void onMenuOpen(boolean isOpen, int flag);
  14. }

右側菜单我没有加入回调,大家依照左側的形式自己加入下就ok ; 

好了,接下来,看下我们推断用户操作是左側还是右側的代码写在哪。

6、onScrollChanged

  1. @Override
  2. protected void onScrollChanged(int l, int t, int oldl, int oldt)
  3. {
  4. super.onScrollChanged(l, t, oldl, oldt);
  5.  
  6. if (l > mMenuWidth)
  7. {
  8. isOperateRight = true;
  9. isOperateLeft = false;
  10. } else
  11. {
  12. isOperateRight = false;
  13. isOperateLeft = true;
  14. }
  15. }

假设看过前两篇,对这种方法应该非常眼熟了吧。

我们直接通过 l 和 菜单宽度进行比較, 假设大于菜单宽度,那么肯定是想操作右側菜单,否则那么就是想操作左側菜单。

到此,我们的双向側滑菜单已经大功告成了,至于你信不信,反正我有效果图。

看效果图前,贴一下MainActivity的代码:

7、MainActivity

  1. package com.zhy.zhy_bin_slidingmenu02;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.List;
  5.  
  6. import android.app.ListActivity;
  7. import android.os.Bundle;
  8. import android.view.Window;
  9. import android.widget.ArrayAdapter;
  10. import android.widget.Toast;
  11.  
  12. import com.zhy.view.BinarySlidingMenu;
  13. import com.zhy.view.BinarySlidingMenu.OnMenuOpenListener;
  14.  
  15. public class MainActivity extends ListActivity
  16. {
  17. private BinarySlidingMenu mMenu;
  18. private List<String> mDatas = new ArrayList<String>();
  19.  
  20. @Override
  21. protected void onCreate(Bundle savedInstanceState)
  22. {
  23. super.onCreate(savedInstanceState);
  24. requestWindowFeature(Window.FEATURE_NO_TITLE);
  25. setContentView(R.layout.activity_main);
  26.  
  27. mMenu = (BinarySlidingMenu) findViewById(R.id.id_menu);
  28. mMenu.setOnMenuOpenListener(new OnMenuOpenListener()
  29. {
  30. @Override
  31. public void onMenuOpen(boolean isOpen, int flag)
  32. {
  33. if (isOpen)
  34. {
  35.  
  36. Toast.makeText(getApplicationContext(),
  37. flag == 0 ?
  38.  
  39. "LeftMenu Open" : "RightMenu Open",
  40. Toast.LENGTH_SHORT).show();
  41. } else
  42. {
  43.  
  44. Toast.makeText(getApplicationContext(),
  45. flag == 0 ? "LeftMenu Close" : "RightMenu Close",
  46. Toast.LENGTH_SHORT).show();
  47. }
  48.  
  49. }
  50. });
  51. // 初始化数据
  52. for (int i = 'A'; i <= 'Z'; i++)
  53. {
  54. mDatas.add((char) i + "");
  55. }
  56. // 设置适配器
  57. setListAdapter(new ArrayAdapter<String>(this, R.layout.item, mDatas));
  58. }
  59. }

没撒好说的。为了方便直接继承了ListActivity,然后设置了一下回调。布局文件一定要有ListView,为了測试我们是否有冲突~~只是有咱们也不怕~

效果图:

当然了,最简单的双向側滑怎么能满足大家的好(Zhao)奇(Nue)心呢,所以我们准备玩点奇妙的花样~~

4、打造抽屉式双向側滑

我们在onScrollChanged加入两行代码~~为mContent设置一个属性动画

  1. @Override
  2. protected void onScrollChanged(int l, int t, int oldl, int oldt)
  3. {
  4. super.onScrollChanged(l, t, oldl, oldt);
  5.  
  6. if (l > mMenuWidth)
  7. {
  8. isOperateRight = true;
  9. isOperateLeft = false;
  10. } else
  11. {
  12. isOperateRight = false;
  13. isOperateLeft = true;
  14. }
  15.  
  16. float scale = l * 1.0f / mMenuWidth;
  17. ViewHelper.setTranslationX(mContent, mMenuWidth * (scale - 1));
  18.  
  19. }

简单分析一下哈:

1、scale。在滑动左側菜单时:值为1.0~0.0;mMenuWidth * (scale - 1) 的值就是从 0.0~ -mMenuWidth(注意:负的) ; 那么mContent的向偏移量,就是0到mMenuWidth ;也就是说,整个滑动的过程。我们强制让内容区域固定了。

2、scale,在滑动右側菜单时:值为:1.0~2.0。mMenuWidth * (scale - 1) 的值就是从 0.0~ mMenuWidth(注意:正数) ;那么mContent的向偏移量,就是0到mMenuWidth 。也就是说,整个滑动的过程,我们强制让内容区域固定了。

好了,内容固定了。那么我们此刻的两边菜单应该是在内容之上显示出来~~这不就是我们的抽屉效果么~

嗯。这次木有效果图了。由于測试结果发现,左側的菜单会被内容区域遮盖住。看不到。右側菜单符合预期效果。由于,左側菜单滑动出来以后,被内容区域遮盖住了,这个也非常easy理解,毕竟我们的布局,内容在左側菜单后面,肯定会挡住它的。那么,怎么办呢?

起初,我准备使用bringToFont方法,在拖动的时候,让菜单在上面~~~只是呢,问题大大的,有兴趣能够试试~~

于是乎,我换了个方法,我将BinarySlidingMenu内部的Linearlayout进行了自己定义,如今布局文件是这种:

  1. <com.zhy.view.BinarySlidingMenu xmlns:android="http://schemas.android.com/apk/res/android"
  2. xmlns:tools="http://schemas.android.com/tools"
  3. xmlns:zhy="http://schemas.android.com/apk/res/com.zhy.zhy_bin_slidingmenu03"
  4. android:id="@+id/id_menu"
  5. android:layout_width="wrap_content"
  6. android:layout_height="fill_parent"
  7. android:scrollbars="none"
  8. zhy:rightPadding="100dp" >
  9.  
  10. <com.zhy.view.MyLinearLayout
  11. android:layout_width="wrap_content"
  12. android:layout_height="fill_parent"
  13. android:orientation="horizontal" >
  14.  
  15. <include layout="@layout/layout_menu" />
  16.  
  17. <LinearLayout
  18. android:layout_width="fill_parent"
  19. android:layout_height="fill_parent"
  20. android:background="@drawable/eee"
  21. android:gravity="center"
  22. android:orientation="horizontal" >
  23.  
  24. <ListView
  25. android:id="@android:id/list"
  26. android:layout_width="fill_parent"
  27. android:layout_height="fill_parent" >
  28. </ListView>
  29. </LinearLayout>
  30.  
  31. <include layout="@layout/layout_menu2" />
  32. </com.zhy.view.MyLinearLayout>
  33.  
  34. </com.zhy.view.BinarySlidingMenu>

MyLinearlayout的代码:

  1. package com.zhy.view;
  2.  
  3. import android.content.Context;
  4. import android.util.AttributeSet;
  5. import android.util.Log;
  6. import android.widget.LinearLayout;
  7.  
  8. public class MyLinearLayout extends LinearLayout
  9. {
  10.  
  11. public MyLinearLayout(Context context, AttributeSet attrs)
  12. {
  13. super(context, attrs);
  14. // Log.e("TAG", "MyLinearLayout");
  15. setChildrenDrawingOrderEnabled(true);
  16. }
  17.  
  18. @Override
  19. protected int getChildDrawingOrder(int childCount, int i)
  20. {
  21. // Log.e("tag", "getChildDrawingOrder" + i + " , " + childCount);
  22.  
  23. if (i == 0)
  24. return 1;
  25. if (i == 2)
  26. return 2;
  27. if (i == 1)
  28. return 0;
  29. return super.getChildDrawingOrder(childCount, i);
  30.  
  31. }
  32.  
  33. }

在构造方法设置setChildrenDrawingOrderEnabled(true);然后getChildDrawingOrder复写一下绘制子View的顺序。让内容(i==0)始终是最先绘制。

如今再执行,效果图:

效果是不是非常赞,请同意我把图挪过来了~~~

如今。还有最后一个效果,假设让,菜单在内容之下呢?

5、打造菜单在内容之下的双向側滑

不用说,大家都能想到,无非就是在onScrollChanged改改属性动画呗,说得对!

1、改写onScrollChanged方法

  1. @Override
  2. protected void onScrollChanged(int l, int t, int oldl, int oldt)
  3. {
  4. super.onScrollChanged(l, t, oldl, oldt);
  5.  
  6. if (l > mMenuWidth)
  7. {
  8. // 1.0 ~2.0 1.0~0.0
  9. // (2-scale)
  10. float scale = l * 1.0f / mMenuWidth;
  11. isOperateRight = true;
  12. isOperateLeft = false;
  13. ViewHelper.setTranslationX(mRightMenu, -mMenuWidth * (2 - scale));
  14.  
  15. } else
  16. {
  17. float scale = l * 1.0f / mMenuWidth;
  18. isOperateRight = false;
  19. isOperateLeft = true;
  20. ViewHelper.setTranslationX(mLeftMenu, mMenuWidth * scale);
  21.  
  22. }
  23. }

也就是拉的时候。尽量让菜单保证在内容之下~~~代码自己琢磨下

2、改写MyLinearLayout

当然了,仅仅这些是不够的,既然我们的样式变化了,那么改写View的绘制顺序肯定也是必须的。

看下我们的MyLinearLayout

  1. package com.zhy.view;
  2.  
  3. import android.content.Context;
  4. import android.util.AttributeSet;
  5. import android.util.Log;
  6. import android.widget.LinearLayout;
  7.  
  8. public class MyLinearLayout extends LinearLayout
  9. {
  10.  
  11. public MyLinearLayout(Context context, AttributeSet attrs)
  12. {
  13. super(context, attrs);
  14. Log.e("TAG", "MyLinearLayout");
  15. setChildrenDrawingOrderEnabled(true);
  16. }
  17.  
  18. @Override
  19. protected int getChildDrawingOrder(int childCount, int i)
  20. {
  21.  
  22. if (i == 0)
  23. return 0;
  24. if (i == 2)
  25. return 1;
  26. if (i == 1)
  27. return 2;
  28. return super.getChildDrawingOrder(childCount, i);
  29.  
  30. }
  31.  
  32. }

效果图:

到此。我们的形态各异的双向側滑就结束了~~~

从最普通的双向,到抽屉式,再到我们的菜单在内容之下的側滑都已经搞定。希望大家通过这三个側滑,能够举一反三,打造各种变态的側滑效果~~~~

最后我把3个側滑的源代码都会共享出来,大家自行下载:

Android普通双向側滑

Android抽屉式双向側滑

Android菜单在内容之下的双向側滑

ps:本人測试手机。小米2s,尽量真机进行測试。

----------------------------------------------------------------------------------------------------------

博主部分视频已经上线。假设你不喜欢枯燥的文本。请猛戳(初录,期待您的支持):

1、高仿微信5.2.1主界面及消息提醒

2、高仿QQ5.0側滑

Android 实现形态各异的双向側滑菜单 自己定义控件来袭的更多相关文章

  1. Android 高仿QQ5.2双向側滑菜单DrawerLayout实现源代码

    Android 高仿QQ5.2双向側滑菜单DrawerLayout实现源代码 左右側滑效果图 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a ...

  2. Android 使用DrawerLayout高速实现側滑菜单

    一.概述 DrawerLayout是一个能够方便的实现Android側滑菜单的组件,我近期开发的项目中也有一个側滑菜单的功能.于是DrawerLayout就派上用场了.假设你从未使用过DrawerLa ...

  3. Android开发系列(十八):自己定义控件样式在drawable目录下的XML实现

    在Android开发的过程中,我们常常须要对控件的样式做一下改变,能够通过用添加背景图片的方式进行改变,可是背景图片放多了肯定会使得APK文件变的非常大. 我们能够用自己定义属性shape来实现. s ...

  4. Android自己定义控件系列案例【五】

    案例效果: 案例分析: 在开发银行相关client的时候或者开发在线支付相关client的时候常常要求用户绑定银行卡,当中银行卡号一般须要空格分隔显示.最常见的就是每4位数以空格进行分隔.以方便用户实 ...

  5. 自己实现android側滑菜单

    当今的android应用设计中.一种主流的设计方式就是会拥有一个側滑菜单,以图为证:     实现这种側滑效果,在5.0曾经我们用的最多的就是SlidingMenu这个开源框架,而5.0之后.goog ...

  6. android側滑菜单-DrawerLayout的基本使用

    眼下主流App开发中,部分是以側滑菜单为主布局架构,曾经做android側滑菜单时.大多选择使用github上的第三方开源框架SildingMenu,可是这个框架还是稍显笨重.好消息是google已经 ...

  7. android:QQ多种側滑菜单的实现

    在这篇文章中写了 自己定义HorizontalScrollView实现qq側滑菜单 然而这个菜单效果仅仅是普通的側拉效果 我们还能够实现抽屉式側滑菜单 就像这样 第一种效果 另外一种效果 第三种效果 ...

  8. iOS分组通讯录效果+側滑菜单(MMDrawerController)

    前言的废话-能够忽略 自从学会了使用Cocoapod,就欲罢不能了!由于太简单太赞了,不用再把源代码粘到project里了! 參见戴维营博客中的解说:Cocoapod 安装以及使用 先上一下效果图,请 ...

  9. Android 打造完美的侧滑菜单/侧滑View控件

    概述 Android 打造完美的侧滑菜单/侧滑View控件,完全自定义实现,支持左右两个方向弹出,代码高度简洁流畅,兼容性高,控件实用方便. 详细 代码下载:http://www.demodashi. ...

随机推荐

  1. jQuery 首页搜索区域模块随页面滑动而变化

    /*搜索区块的颜色变化*/ function search(){ var searchBox = document.querySelector('.m_head'); var bannerBox = ...

  2. CAD参数绘制角度标注(com接口)

    主要用到函数说明: _DMxDrawX::DrawDimAngular 绘制一个角度标注.详细说明如下: 参数 说明 DOUBLE dAngleVertexX 角度标注的顶点的X值 DOUBLE dA ...

  3. Python 软件开发目录规范

    目录规范: ATM  #工程文件夹 ------| bin  #用来存放可执行文件的 |----  start.py conf  #用来存放配置信息的 |----  settings.py lib  ...

  4. MyBatis 实现分页功能

    MySQL 的分页功能是基于内存的分页(即查出来所有记录,再按起始位置和页面容量取出结果). 案例:①根据用户名(支持模糊查询).用户角色 id 查询用户列表(即根据用户名称或根据用户角色 id 又或 ...

  5. 微信小程序 设置计时器(setInterval)、清除计时器(clearInterval)

    1.wxml代码 <!--index.wxml--> <view class="container"> <button type='primary' ...

  6. 【笔记】搭建OpenWrt编译环境

    参考书目<B智能路由开发指南> 目标:搭建一个OpenWrt编译环境,可以同时在家里和公司使用. [2018-09-13] 刚开始想用自己的电脑共享远程桌面,但不知道什么原因搞不定,所以干 ...

  7. stl sort和qsort的使用

    好不容易使用了下stl的qsort函数,顺便和sort函数一起总结下: 很多时候我们都需要用到排序. 例如: 1 #include <iostream> #include <algo ...

  8. Can't connect to MySQL server on '127.0.0.1' (10061) (code 2003)解决方法

  9. Python中的列表(5)

    1.使用函数 range() 创建一个数字列表 for value in range(1,5): print(value) console: 我们发现,它并不会打印数字5,因为 range() 函数, ...

  10. 88-On Balance Volume 能量潮指标.(2015.7.4)

    On Balance Volume 能量潮指标 ~计算方法: 如果当天的收盘价高于昨天的话,那么:OBV(i) = OBV(i-1)+VOLUME(i) 如果当天的收盘价低于昨天的话,那么:OBV(i ...