1. ViewPager要点:

  • ViewPager 是一个布局管理类(layout manager),用于提供页面的左右滑动功能,类似于ListView,也有为ViewPager提供     数据(Fragment)的 adapter 控制类(FragmentPagerAdapter, FragmentStatePagerAdapter)。
  • ViewPager 经常和 Fragment 一起使用,结合ActionBar 的 Tab,实现 tab 页面的左右滑动。
  • ViewPager 属于 android sdk 扩展包,若要使用 ViewPager,需要外部导入扩展包:android-support-v4.jar

2. 实现功能:

本例实现的功能效果如下图所示:
    实现 tab 页的左右滑动的好处是,由于我们经常习惯单手操作手机,而单手切换 tab 页是非常困难的,而 tab 页面的左右滑动     功能正好可以解决这个问题,提供更加方便的交互。

3. 原理说明:

整个应用可以分为如图所示的几个模块:
  • 主界面Activity 主要由一个 ViewPager 组成,里面装载了三个 Fragment 页面,进行左右滑动;
  • 主界面Activity 的ActionBar 中创建三个 Tab 按键(Tab Button);
  • ActionBar 与 ViewPager 之间的交互关系如下:ViewPager 带动其装载的三个 Fragment 左右切换的同时,控制其相对应的Action Tab Button 的左右切换;反过来,当用户手动切换三个 Tab Button 时,控制 ViewPager 中相对应的 Fragment 的切换。

4. 具体步骤:

4.1 新建工程并导入android-support-v4.jar扩展包:

  • 新建一个名为ActionTabWithSlippingFragment。
  • 导入android-support-v4.jar扩展包:网上很多导入方法都表示要通过 “Project - Properties - Java Build Path - Add External JARs” 进行导入,这样可以保证编译通过,但是运行的时候会出错!这里我用的导入方法如下:
  • 首先在工程目录下新建一个文件夹 libs,然后从 "android sdk目录\extras\android\compatibility\v4" 下将 android-support-v4.jar 手动拷贝到新建的 libs 目录下,最后右击工程选择 “Refresh” 刷新即可,这时可以看到 libs 目录和 Android Dependencies 目录下均有 android-support-v4.jar 出现,这就表示导入成功了!如下图所示:

4.2 创建三个 Fragment 类作为可滑动的 Tab 页(view),并由 ViewPager来管理(manager):

  • 创建三个 Fragement 类:Fragment1.java,Fragment2.java,Fragment3.java,同时为其各自创建布局视图文件:fragment1.xml,fragment2.xml,fragment3.xml,分别设置红(R)、绿(G)、蓝(B)背景。
  • Fragment1.java创建如下,关键实现其 onCreateView 方法,设置其布局:
  • [java] view plaincopy
    1. public class Fragment1 extends Fragment {
    2. @Override
    3. public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    4. return inflateAndSetupView(inflater, container, savedInstanceState, R.layout.fragment1);
    5. }
    6. private View inflateAndSetupView(LayoutInflater inflater, ViewGroup container,
    7. Bundle savedInstanceState, int layoutResourceId) {
    8. View layout = inflater.inflate(layoutResourceId, container, false);
    9. return layout;
    10. }
    11. }
  • fragment1.xml 主要定义一个带有红色背景的的LinearLayout:
  • [html] view plaincopy
    1. <?xml version="1.0" encoding="utf-8"?>
    2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    3. android:layout_width="match_parent"
    4. android:layout_height="match_parent"
    5. android:orientation="vertical"
    6. android:background="#FF0000" >
    7. <TextView
    8. android:layout_width="match_parent"
    9. android:layout_height="match_parent"
    10. android:layout_gravity="center"
    11. android:gravity="center"
    12. android:text="@string/frag_1"
    13. android:textSize="30dp"
    14. android:textStyle="bold"
    15. android:textColor="#FFFFFF" />
    16. </LinearLayout>

4.3 创建主界面 Activity:ActionTabWithSlippingFragmentActivity,及其对应的布局文件:main.xml:

  • 设置 ActionBar 的样式,如:无回退按键、无标题等——setUpActionBar()
  • 初始化并设置 ViewPager,两个要点:首先要定义并设置 ViewPager 所需要的数据控制类 ViewPagerAdapter,ViewPagerAdapter 必须实现如何返回对应位置的 Fragment、页数、页标题;其次,要实现 ViewPager 的翻页监听接口(OnPageChangeListener),主要是实现当前页面被切换时需要导航到对应位置的action tab button,必要的时候,还需要实现在页面翻动的各个状态下(正在翻动、翻动即将停止、翻动完全停止)的相应处理——setUpViewPager()
  • 然后需要创建三个 tab button,并实现 tab 的监听接口:主要是当选择相应 tab 时,如何切换 ViewPager 的相应页面——setUpTabs()
  • ActionTabWithSlippingFragmentActivity.java 的实现部分
  • [java] view plaincopy
    1. public class ActionTabWithSlippingFragmentActivity extends FragmentActivity
    2. implements ActionBar.TabListener{
    3. private Fragment1 mFragment1 = new Fragment1();
    4. private Fragment2 mFragment2 = new Fragment2();
    5. private Fragment3 mFragment3 = new Fragment3();
    6. private static final int TAB_INDEX_COUNT = 3;
    7. private static final int TAB_INDEX_ONE = 0;
    8. private static final int TAB_INDEX_TWO = 1;
    9. private static final int TAB_INDEX_THREE = 2;
    10. private ViewPager mViewPager;
    11. private ViewPagerAdapter mViewPagerAdapter;
    12. /** Called when the activity is first created. */
    13. @Override
    14. public void onCreate(Bundle savedInstanceState) {
    15. super.onCreate(savedInstanceState);
    16. setContentView(R.layout.main);
    17. setUpActionBar();
    18. setUpViewPager();
    19. setUpTabs();
    20. }
    21. private void setUpActionBar() {
    22. final ActionBar actionBar = getActionBar();
    23. actionBar.setHomeButtonEnabled(false);
    24. actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
    25. actionBar.setDisplayShowTitleEnabled(false);
    26. actionBar.setDisplayShowHomeEnabled(false);
    27. }
    28. private void setUpViewPager() {
    29. mViewPagerAdapter = new ViewPagerAdapter(getSupportFragmentManager());
    30. mViewPager = (ViewPager)findViewById(R.id.pager);
    31. mViewPager.setAdapter(mViewPagerAdapter);
    32. mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
    33. @Override
    34. public void onPageSelected(int position) {
    35. final ActionBar actionBar = getActionBar();
    36. actionBar.setSelectedNavigationItem(position);
    37. }
    38. @Override
    39. public void onPageScrollStateChanged(int state) {
    40. switch(state) {
    41. case ViewPager.SCROLL_STATE_IDLE:
    42. //TODO
    43. break;
    44. case ViewPager.SCROLL_STATE_DRAGGING:
    45. //TODO
    46. break;
    47. case ViewPager.SCROLL_STATE_SETTLING:
    48. //TODO
    49. break;
    50. default:
    51. //TODO
    52. break;
    53. }
    54. }
    55. });
    56. }
    57. private void setUpTabs() {
    58. final ActionBar actionBar = getActionBar();
    59. for (int i = 0; i < mViewPagerAdapter.getCount(); ++i) {
    60. actionBar.addTab(actionBar.newTab()
    61. .setText(mViewPagerAdapter.getPageTitle(i))
    62. .setTabListener(this));
    63. }
    64. }
    65. @Override
    66. protected void onDestroy() {
    67. super.onDestroy();
    68. }
    69. public class ViewPagerAdapter extends FragmentPagerAdapter {
    70. public ViewPagerAdapter(FragmentManager fm) {
    71. super(fm);
    72. // TODO Auto-generated constructor stub
    73. }
    74. @Override
    75. public Fragment getItem(int position) {
    76. // TODO Auto-generated method stub
    77. switch (position) {
    78. case TAB_INDEX_ONE:
    79. return mFragment1;
    80. case TAB_INDEX_TWO:
    81. return mFragment2;
    82. case TAB_INDEX_THREE:
    83. return mFragment3;
    84. }
    85. throw new IllegalStateException("No fragment at position " + position);
    86. }
    87. @Override
    88. public int getCount() {
    89. // TODO Auto-generated method stub
    90. return TAB_INDEX_COUNT;
    91. }
    92. @Override
    93. public CharSequence getPageTitle(int position) {
    94. String tabLabel = null;
    95. switch (position) {
    96. case TAB_INDEX_ONE:
    97. tabLabel = getString(R.string.tab_1);
    98. break;
    99. case TAB_INDEX_TWO:
    100. tabLabel = getString(R.string.tab_2);
    101. break;
    102. case TAB_INDEX_THREE:
    103. tabLabel = getString(R.string.tab_3);
    104. break;
    105. }
    106. return tabLabel;
    107. }
    108. }
    109. @Override
    110. public void onTabReselected(Tab tab, FragmentTransaction ft) {
    111. // TODO Auto-generated method stub
    112. }
    113. @Override
    114. public void onTabSelected(Tab tab, FragmentTransaction ft) {
    115. // TODO Auto-generated method stub
    116. mViewPager.setCurrentItem(tab.getPosition());
    117. }
    118. @Override
    119. public void onTabUnselected(Tab tab, FragmentTransaction ft) {
    120. // TODO Auto-generated method stub
    121. }
    122. }
  • main.xml 的实现部分:
  • [html] view plaincopy
    1. <?xml version="1.0" encoding="utf-8"?>
    2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    3. android:layout_width="fill_parent"
    4. android:layout_height="fill_parent" >
    5. <android.support.v4.view.ViewPager
    6. android:id="@+id/pager"
    7. android:layout_width="match_parent"
    8. android:layout_height="match_parent" >
    9. </android.support.v4.view.ViewPager>
    10. </RelativeLayout>

4.4 结束语:

  • 关于 ViewPager 结合ActionBar 和 Fragment 实现页面滑动式 tab 功能在 google 的官方开发文档中也有说明,本例相关原理亦以此作为参考,详情请查阅:http://developer.android.com/reference/android/support/v4/view/ViewPager.html
  • 源代码供开放,无需积分:http://download.csdn.net/detail/ixiaobu/4743378

1. ViewPager要点:

  • ViewPager 是一个布局管理类(layout manager),用于提供页面的左右滑动功能,类似于ListView,也有为ViewPager提供     数据(Fragment)的 adapter 控制类(FragmentPagerAdapter, FragmentStatePagerAdapter)。
  • ViewPager 经常和 Fragment 一起使用,结合ActionBar 的 Tab,实现 tab 页面的左右滑动。
  • ViewPager 属于 android sdk 扩展包,若要使用 ViewPager,需要外部导入扩展包:android-support-v4.jar

2. 实现功能:

本例实现的功能效果如下图所示:
    实现 tab 页的左右滑动的好处是,由于我们经常习惯单手操作手机,而单手切换 tab 页是非常困难的,而 tab 页面的左右滑动     功能正好可以解决这个问题,提供更加方便的交互。

3. 原理说明:

整个应用可以分为如图所示的几个模块:
  • 主界面Activity 主要由一个 ViewPager 组成,里面装载了三个 Fragment 页面,进行左右滑动;
  • 主界面Activity 的ActionBar 中创建三个 Tab 按键(Tab Button);
  • ActionBar 与 ViewPager 之间的交互关系如下:ViewPager 带动其装载的三个 Fragment 左右切换的同时,控制其相对应的Action Tab Button 的左右切换;反过来,当用户手动切换三个 Tab Button 时,控制 ViewPager 中相对应的 Fragment 的切换。

4. 具体步骤:

4.1 新建工程并导入android-support-v4.jar扩展包:

  • 新建一个名为ActionTabWithSlippingFragment。
  • 导入android-support-v4.jar扩展包:网上很多导入方法都表示要通过 “Project - Properties - Java Build Path - Add External JARs” 进行导入,这样可以保证编译通过,但是运行的时候会出错!这里我用的导入方法如下:
  • 首先在工程目录下新建一个文件夹 libs,然后从 "android sdk目录\extras\android\compatibility\v4" 下将 android-support-v4.jar 手动拷贝到新建的 libs 目录下,最后右击工程选择 “Refresh” 刷新即可,这时可以看到 libs 目录和 Android Dependencies 目录下均有 android-support-v4.jar 出现,这就表示导入成功了!如下图所示:

4.2 创建三个 Fragment 类作为可滑动的 Tab 页(view),并由 ViewPager来管理(manager):

  • 创建三个 Fragement 类:Fragment1.java,Fragment2.java,Fragment3.java,同时为其各自创建布局视图文件:fragment1.xml,fragment2.xml,fragment3.xml,分别设置红(R)、绿(G)、蓝(B)背景。
  • Fragment1.java创建如下,关键实现其 onCreateView 方法,设置其布局:
  • [java] view plaincopy
    1. public class Fragment1 extends Fragment {
    2. @Override
    3. public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    4. return inflateAndSetupView(inflater, container, savedInstanceState, R.layout.fragment1);
    5. }
    6. private View inflateAndSetupView(LayoutInflater inflater, ViewGroup container,
    7. Bundle savedInstanceState, int layoutResourceId) {
    8. View layout = inflater.inflate(layoutResourceId, container, false);
    9. return layout;
    10. }
    11. }
  • fragment1.xml 主要定义一个带有红色背景的的LinearLayout:
  • [html] view plaincopy
    1. <?xml version="1.0" encoding="utf-8"?>
    2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    3. android:layout_width="match_parent"
    4. android:layout_height="match_parent"
    5. android:orientation="vertical"
    6. android:background="#FF0000" >
    7. <TextView
    8. android:layout_width="match_parent"
    9. android:layout_height="match_parent"
    10. android:layout_gravity="center"
    11. android:gravity="center"
    12. android:text="@string/frag_1"
    13. android:textSize="30dp"
    14. android:textStyle="bold"
    15. android:textColor="#FFFFFF" />
    16. </LinearLayout>

4.3 创建主界面 Activity:ActionTabWithSlippingFragmentActivity,及其对应的布局文件:main.xml:

  • 设置 ActionBar 的样式,如:无回退按键、无标题等——setUpActionBar()
  • 初始化并设置 ViewPager,两个要点:首先要定义并设置 ViewPager 所需要的数据控制类 ViewPagerAdapter,ViewPagerAdapter 必须实现如何返回对应位置的 Fragment、页数、页标题;其次,要实现 ViewPager 的翻页监听接口(OnPageChangeListener),主要是实现当前页面被切换时需要导航到对应位置的action tab button,必要的时候,还需要实现在页面翻动的各个状态下(正在翻动、翻动即将停止、翻动完全停止)的相应处理——setUpViewPager()
  • 然后需要创建三个 tab button,并实现 tab 的监听接口:主要是当选择相应 tab 时,如何切换 ViewPager 的相应页面——setUpTabs()
  • ActionTabWithSlippingFragmentActivity.java 的实现部分
  • [java] view plaincopy
    1. public class ActionTabWithSlippingFragmentActivity extends FragmentActivity
    2. implements ActionBar.TabListener{
    3. private Fragment1 mFragment1 = new Fragment1();
    4. private Fragment2 mFragment2 = new Fragment2();
    5. private Fragment3 mFragment3 = new Fragment3();
    6. private static final int TAB_INDEX_COUNT = 3;
    7. private static final int TAB_INDEX_ONE = 0;
    8. private static final int TAB_INDEX_TWO = 1;
    9. private static final int TAB_INDEX_THREE = 2;
    10. private ViewPager mViewPager;
    11. private ViewPagerAdapter mViewPagerAdapter;
    12. /** Called when the activity is first created. */
    13. @Override
    14. public void onCreate(Bundle savedInstanceState) {
    15. super.onCreate(savedInstanceState);
    16. setContentView(R.layout.main);
    17. setUpActionBar();
    18. setUpViewPager();
    19. setUpTabs();
    20. }
    21. private void setUpActionBar() {
    22. final ActionBar actionBar = getActionBar();
    23. actionBar.setHomeButtonEnabled(false);
    24. actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
    25. actionBar.setDisplayShowTitleEnabled(false);
    26. actionBar.setDisplayShowHomeEnabled(false);
    27. }
    28. private void setUpViewPager() {
    29. mViewPagerAdapter = new ViewPagerAdapter(getSupportFragmentManager());
    30. mViewPager = (ViewPager)findViewById(R.id.pager);
    31. mViewPager.setAdapter(mViewPagerAdapter);
    32. mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
    33. @Override
    34. public void onPageSelected(int position) {
    35. final ActionBar actionBar = getActionBar();
    36. actionBar.setSelectedNavigationItem(position);
    37. }
    38. @Override
    39. public void onPageScrollStateChanged(int state) {
    40. switch(state) {
    41. case ViewPager.SCROLL_STATE_IDLE:
    42. //TODO
    43. break;
    44. case ViewPager.SCROLL_STATE_DRAGGING:
    45. //TODO
    46. break;
    47. case ViewPager.SCROLL_STATE_SETTLING:
    48. //TODO
    49. break;
    50. default:
    51. //TODO
    52. break;
    53. }
    54. }
    55. });
    56. }
    57. private void setUpTabs() {
    58. final ActionBar actionBar = getActionBar();
    59. for (int i = 0; i < mViewPagerAdapter.getCount(); ++i) {
    60. actionBar.addTab(actionBar.newTab()
    61. .setText(mViewPagerAdapter.getPageTitle(i))
    62. .setTabListener(this));
    63. }
    64. }
    65. @Override
    66. protected void onDestroy() {
    67. super.onDestroy();
    68. }
    69. public class ViewPagerAdapter extends FragmentPagerAdapter {
    70. public ViewPagerAdapter(FragmentManager fm) {
    71. super(fm);
    72. // TODO Auto-generated constructor stub
    73. }
    74. @Override
    75. public Fragment getItem(int position) {
    76. // TODO Auto-generated method stub
    77. switch (position) {
    78. case TAB_INDEX_ONE:
    79. return mFragment1;
    80. case TAB_INDEX_TWO:
    81. return mFragment2;
    82. case TAB_INDEX_THREE:
    83. return mFragment3;
    84. }
    85. throw new IllegalStateException("No fragment at position " + position);
    86. }
    87. @Override
    88. public int getCount() {
    89. // TODO Auto-generated method stub
    90. return TAB_INDEX_COUNT;
    91. }
    92. @Override
    93. public CharSequence getPageTitle(int position) {
    94. String tabLabel = null;
    95. switch (position) {
    96. case TAB_INDEX_ONE:
    97. tabLabel = getString(R.string.tab_1);
    98. break;
    99. case TAB_INDEX_TWO:
    100. tabLabel = getString(R.string.tab_2);
    101. break;
    102. case TAB_INDEX_THREE:
    103. tabLabel = getString(R.string.tab_3);
    104. break;
    105. }
    106. return tabLabel;
    107. }
    108. }
    109. @Override
    110. public void onTabReselected(Tab tab, FragmentTransaction ft) {
    111. // TODO Auto-generated method stub
    112. }
    113. @Override
    114. public void onTabSelected(Tab tab, FragmentTransaction ft) {
    115. // TODO Auto-generated method stub
    116. mViewPager.setCurrentItem(tab.getPosition());
    117. }
    118. @Override
    119. public void onTabUnselected(Tab tab, FragmentTransaction ft) {
    120. // TODO Auto-generated method stub
    121. }
    122. }
  • main.xml 的实现部分:
  • [html] view plaincopy
    1. <?xml version="1.0" encoding="utf-8"?>
    2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    3. android:layout_width="fill_parent"
    4. android:layout_height="fill_parent" >
    5. <android.support.v4.view.ViewPager
    6. android:id="@+id/pager"
    7. android:layout_width="match_parent"
    8. android:layout_height="match_parent" >
    9. </android.support.v4.view.ViewPager>
    10. </RelativeLayout>

4.4 结束语:

  • 关于 ViewPager 结合ActionBar 和 Fragment 实现页面滑动式 tab 功能在 google 的官方开发文档中也有说明,本例相关原理亦以此作为参考,详情请查阅:http://developer.android.com/reference/android/support/v4/view/ViewPager.html
  • 源代码供开放,无需积分:http://download.csdn.net/detail/ixiaobu/4743378

利用ViewPager+Fragment+actionbar实现可左右滑动的Action Tab相关推荐

  1. Android 应用开发---6.ViewPager+Fragment的基本使用

    ViewPager+Fragment的基本使用 利用ViewPager+Fragment简单实现页面的切换 项目的大概组成: 以下是代码的实现,首先在activity_main.xml新建菜单栏和Vi ...

  2. Android开发之ViewPager+ActionBar+Fragment实现响应式可滑动Tab

    今天我们要实现的这个效果呢,在Android的应用中十分地常见,我们可以看到下面两张图,无论是系统内置的联系人应用,还是AnyView的阅读器应用,我们总能找到这样的影子,当我们滑动屏幕时,Tab可以 ...

  3. android圆球触摸怎么实现,Android利用ViewPager实现带小圆球的图片滑动

    Android利用ViewPager实现带小圆球的图片滑动 发布时间:2020-10-02 05:55:29 来源:脚本之家 阅读:69 作者:antimage08 在上文实现的带小圆球的图片滑动的通 ...

  4. ViewPager+Fragment实现TabHost,Fragment动态添加、删除,Tab选项卡跟随滑动

    效果图: 代码功能: (1)用ViewPager+Fragment实现TabHost,ViewPager的每一个Page均是Fragment.ViewPager中的Fragment可以动态添加.删除. ...

  5. android fragment界面滑动切换效果,Android App中使用ViewPager+Fragment实现滑动切换效果...

    在android应用中,多屏滑动是一种很常见的风格,没有采用viewpager的代码实现会很长,如果采用ViewPager,代码就会短很多,但是使用ViewPager也有弊端:需要导入android- ...

  6. android 应用切换滑动,Android应用中利用ViewPager实现多页面滑动切换效果示例

    1.添加android support包因为上面的几个类都是在android support包中才提供,我们先添加包. 在Eclipse->Window->Android SDK Mana ...

  7. Android 应用开发----7. ViewPager+Fragment一步步打造顶部导航界面滑动效果

    ViewPager+Fragment一步步打造顶部导航界面滑动效果 在许多应用中,我们常常用到这么一个效果: 可以看到,由于现在的应用数据经常需要涉及到多个模块,所以常常需要使用滑动标签在多个页面之间 ...

  8. android左右滑动fragment,Android基于ViewPager+Fragment实现左右滑屏效果的方法

    本文实例讲述了Android基于ViewPager+Fragment实现左右滑屏效果的方法.分享给大家供大家参考,具体如下: 1.xml布局模板 android:id="@+id/local ...

  9. 小牛的安卓笔记-----底部导航栏的实现以及用TabLayout+ViewPager+Fragment实现页面滑动切换

    昨夜西风凋碧树,独上高楼,望尽天涯路. 今天难得有时间,准备写一写我们在APP中经常用到的页面形式,废话不多说,直接一张图看看页面效果你就知道为啥是常用的页面形式.先看看逻辑和最后的效果是怎么样的: ...

最新文章

  1. 简洁的描述SpringMVC工作流程
  2. [ATF]-ATF的异常向量表介绍-(irq,fiq,smc,hyc...)
  3. 阿里云Redis开发规范[转]
  4. shmmax单位_kernel.shmmax ,kernel.shmmni 和kernel.shmall
  5. Windows远程文件拷贝openEuler--WinSCP
  6. 人力资源社会保障部关于公布国家职业资格目录的通知
  7. Class.forName和ClassLoader有什么区别
  8. 传感器绕着世界坐标系旋转产生的疑惑
  9. 在vb中实现真正锁定的带自定义菜单的文本控件
  10. Spring源码分析:Bean加载流程概览及配置文件读取
  11. Git的介绍和常用命令使用
  12. 苹果Mac临时文件存储助手工具:Yoink
  13. 关于struts框架的优缺点
  14. Windows系统win10系统压缩解压软件推荐
  15. 高通QCA9377 WiFi蓝牙模块芯片介绍
  16. 电脑如何开启卓越性能模式
  17. Execl同时冻结行和列
  18. hdoj3085 / acwing177 Nightmare
  19. python实现比较两手牌的大小--斗地主规则
  20. WorkMan学习篇:三

热门文章

  1. 【错误记录】PyCharm 运行 Python 程序报错 ( PEP 8: E305 expected 2 blank lines after class or function definiti )
  2. 【Java 虚拟机原理】Class 字节码二进制文件分析 三 ( 访问和修饰标志 | 类索引 | 父类索引 | 接口计数器 | 接口表 | 字段计数器 | 字段表 )
  3. 【OpenGL】六、Visual Studio 2019 配置 GitHub ( 提取和拉取简介 | 拉取远程代码 )
  4. 【组合数学】排列组合 ( 排列组合内容概要 | 选取问题 | 集合排列 | 集合组合 )
  5. 【Android 应用开发】对Android体系结构的理解--后续会补充
  6. CPU芯片哪家强?电视处理器这么选就对了!
  7. CSharpGL(42)借助帧缓存实现渲染到纹理(RenderToTexture)
  8. docker的学习总结
  9. 【position也可以很复杂】当弹出层遇上了鼠标定位(下)
  10. 话说placeholder