用RecycleView来实现布局形式。默认仅仅能指定一种布局格式。可是实际中我们的布局常常会用到多种类型的布局方式。怎样实现呢?

今天来说下经常使用的2钟方式。

第一种:

通过自己定义addHeadView方法来加入头布局

RecycleViewWithHead.java

  1. import android.app.Activity;
  2. import android.os.Bundle;
  3. import android.support.v7.widget.GridLayoutManager;
  4. import android.support.v7.widget.GridLayoutManager.SpanSizeLookup;
  5. import android.support.v7.widget.RecyclerView;
  6. import android.view.View;
  7.  
  8. public class RecycleViewWithHead extends Activity {
  9.  
  10. private RecyclerView rcv;
  11. // 当前的条目是recyclerView的头布局
  12. public static final int HEADER_RECYCLER_VIEW_ITEM = 0;
  13. // 当前的条目是普通recyclerView的条目
  14. public static final int NORMAL_RECYCLER_VIEW_ITEM = 1;
  15.  
  16. @Override
  17. protected void onCreate(Bundle savedInstanceState) {
  18. // TODO Auto-generated method stub
  19. super.onCreate(savedInstanceState);
  20. setContentView(R.layout.activity_recycle);
  21. rcv = (RecyclerView) findViewById(R.id.rcv);
  22. // 设置布局管理
  23. GridLayoutManager manager = new GridLayoutManager(this, 2);
  24. // 设置布局管理一条数据占用几行,假设是头布局则头布局自己占用一行
  25. manager.setSpanSizeLookup(new SpanSizeLookup() {
  26. @Override
  27. public int getSpanSize(int postion) {
  28. if (postion == 0) {
  29. return 2;
  30. } else {
  31. return 1;
  32. }
  33. }
  34. });
  35. rcv.setLayoutManager(manager);
  36. MyRecycleAdapter adapter = new MyRecycleAdapter(
  37. RecycleViewWithHead.this, 20);
  38. View view = View.inflate(this, R.layout.head, null);
  39. adapter.addHeadView(view);
  40. rcv.setAdapter(adapter);
  41. }
  42. }



布局文件activity_recycle.xml

  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2.     xmlns:tools="http://schemas.android.com/tools"
  3.     android:layout_width="match_parent"
  4.     android:layout_height="match_parent">
  5.  
  6.     <android.support.v7.widget.RecyclerView
  7.         android:id="@+id/rcv"
  8.         android:layout_width="match_parent"
  9.         android:layout_height="wrap_content" />
  10.  
  11. </RelativeLayout>



头布局文件head.xml

  1. <?
  2.  
  3. xml version="1.0" encoding="utf-8"?
  4.  
  5. >
  6. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  7. android:layout_width="match_parent"
  8. android:layout_height="match_parent" >
  9.  
  10. <ImageView
  11. android:id="@+id/iv_head"
  12. android:layout_width="80dp"
  13. android:layout_height="80dp"
  14. android:layout_margin="10dp"
  15. android:src="@drawable/head" />
  16.  
  17. <TextView
  18. android:id="@+id/tv_head"
  19. android:layout_width="wrap_content"
  20. android:layout_height="wrap_content"
  21. android:layout_alignTop="@+id/iv_head"
  22. android:layout_toRightOf="@+id/iv_head"
  23. android:text="这是一张熊猫的图片" />
  24.  
  25. <ImageView
  26. android:id="@+id/iv_head_bottom"
  27. android:layout_width="wrap_content"
  28. android:layout_height="wrap_content"
  29. android:layout_alignBottom="@+id/iv_head"
  30. android:layout_toRightOf="@+id/iv_head"
  31. android:src="@drawable/type" />
  32.  
  33. </RelativeLayout>

适配器MyRecycleAdapter.java

  1. import android.content.Context;
  2. import android.support.v7.widget.RecyclerView;
  3. import android.support.v7.widget.RecyclerView.ViewHolder;
  4. import android.view.LayoutInflater;
  5. import android.view.View;
  6. import android.view.View.OnClickListener;
  7. import android.view.ViewGroup;
  8. import android.widget.Toast;
  9.  
  10. public class MyRecycleAdapter extends
  11. RecyclerView.Adapter<MyRecycleAdapterHolder> {
  12.  
  13. private View headView;
  14. private Context mContext;
  15. private int count;
  16.  
  17. MyRecycleAdapter(Context mContext, int count) {
  18. this.count = count;
  19. this.mContext = mContext;
  20. }
  21.  
  22. /**
  23. * 设置数据源总的条目
  24. */
  25. @Override
  26. public int getItemCount() {
  27. //返回条目数加头布局个数
  28. return count + 1;
  29. }
  30.  
  31. @Override
  32. public void onBindViewHolder(MyRecycleAdapterHolder holder,
  33. final int position) {
  34. int itemViewType = getItemViewType(position);
  35. // 头部
  36. if (itemViewType == RecycleViewWithHead.HEADER_RECYCLER_VIEW_ITEM) {
  37. return;
  38. } else if (itemViewType == RecycleViewWithHead.NORMAL_RECYCLER_VIEW_ITEM) {//普通条目
  39. holder.iv_item_icon.setOnClickListener(new OnClickListener() {
  40. @Override
  41. public void onClick(View v) {
  42. Toast.makeText(mContext, (position - 1) + "", 0).show();
  43. }
  44. });
  45. }
  46.  
  47. }
  48.  
  49. @Override
  50. public MyRecycleAdapterHolder onCreateViewHolder(ViewGroup parent,
  51. int viewType) {
  52. View root = null;
  53. if (viewType == RecycleViewWithHead.HEADER_RECYCLER_VIEW_ITEM) {
  54. root = headView;
  55. } else {
  56. root = LayoutInflater.from(mContext).inflate(R.layout.item, parent,
  57. false);
  58. }
  59. return new MyRecycleAdapterHolder(root, viewType);
  60. }
  61.  
  62. /**
  63. * 加入自己定义头部
  64. */
  65. public void addHeadView(View view) {
  66. this.headView = view;
  67. }
  68.  
  69. @Override
  70. public int getItemViewType(int position) {
  71.  
  72. if (position == 0) {
  73. return RecycleViewWithHead.HEADER_RECYCLER_VIEW_ITEM;
  74. } else {
  75. return RecycleViewWithHead.NORMAL_RECYCLER_VIEW_ITEM;
  76. }
  77. }
  78. }

普通条目的布局文件item.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:id="@+id/ll_list"
  4. android:layout_width="wrap_content"
  5. android:layout_height="wrap_content"
  6. android:layout_marginLeft="2dp"
  7. android:layout_marginRight="2dp"
  8. android:layout_marginTop="5dp"
  9. android:orientation="vertical" >
  10.  
  11. <ImageView
  12. android:id="@+id/iv_item_icon"
  13. android:layout_width="wrap_content"
  14. android:layout_height="wrap_content"
  15. android:src="@drawable/item" />
  16.  
  17. <TextView
  18. android:id="@+id/tv_item"
  19. android:layout_width="wrap_content"
  20. android:layout_height="wrap_content"
  21. android:layout_gravity="center_horizontal"
  22. android:layout_marginTop="5dp"
  23. android:text="这是一仅仅熊猫" />
  24.  
  25. </LinearLayout>

普通条目的ViewHolder

  1. import android.support.v7.widget.RecyclerView;
  2. import android.view.View;
  3. import android.widget.ImageView;
  4. import android.widget.TextView;
  5.  
  6. public class MyRecycleAdapterHolder extends RecyclerView.ViewHolder{
  7.  
  8. public ImageView iv_item_icon;
  9. public TextView tv_item;
  10. public MyRecycleAdapterHolder(View itemView) {
  11. super(itemView);
  12. }
  13. public MyRecycleAdapterHolder(View itemView,int viewType) {
  14. super(itemView);
  15. initView(itemView,viewType);
  16. }
  17. private void initView(View itemView, int viewType) {
  18. iv_item_icon = (ImageView) itemView.findViewById(R.id.iv_item_icon);
  19. tv_item = (TextView) itemView.findViewById(R.id.tv_item);
  20. }
  21.  
  22. }

效果图:

另一种情况类似于淘宝的商品展示我们能够切换每行显示的数量,事实上也非常easy

先看下要实现的效果:



我先说下大致的实现思路:

1.给adapter设置一个当前显示多行还是单行的标记。

2.每次切换视图时重置标记。并重置RecycleView的LayoutManager。

3.调用adapter.notifyItemRangeChanged(2, adapter.getItemCount());(第一个參数是动画開始的位置索引)

好了再来看下RecycleViewWithHead.java

  1. import com.example.myrecycleviewdemo.adapter.MyRecycleAdapter;
  2. import android.app.Activity;
  3. import android.os.Bundle;
  4. import android.support.v7.widget.GridLayoutManager;
  5. import android.support.v7.widget.GridLayoutManager.SpanSizeLookup;
  6. import android.support.v7.widget.RecyclerView;
  7. import android.view.View;
  8. import android.view.View.OnClickListener;
  9. import android.widget.ImageView;
  10.  
  11. public class RecycleViewWithHead extends Activity implements OnClickListener {
  12.  
  13. private RecyclerView rcv;
  14. // 当前的条目是recyclerView的头布局
  15. public static final int HEADER_RECYCLER_VIEW_ITEM = 0;
  16. // 当前的条目是普通recyclerView的条目
  17. public static final int NORMAL_RECYCLER_VIEW_ITEM = 1;
  18. // 一行显示一个
  19. public static final int RECYCLER_VIEW_ITEM_SINGLE = 3;
  20. // 一行显示两个
  21. public static final int RECYCLER_VIEW_ITEM_DOUBLE = 4;
  22. private ImageView iv_switch;// 视图转换
  23. private MyRecycleAdapter adapter;
  24. private GridLayoutManager manager;
  25.  
  26. @Override
  27. protected void onCreate(Bundle savedInstanceState) {
  28. // TODO Auto-generated method stub
  29. super.onCreate(savedInstanceState);
  30. setContentView(R.layout.activity_recycle);
  31. rcv = (RecyclerView) findViewById(R.id.rcv);
  32. iv_switch = (ImageView) findViewById(R.id.iv_switch);
  33. iv_switch.setOnClickListener(this);
  34. manager = new GridLayoutManager(this, 2);
  35. // 设置布局管理一条数据占用几行,假设是头布局则头布局自己占用一行
  36. manager.setSpanSizeLookup(new SpanSizeLookup() {
  37. @Override
  38. public int getSpanSize(int postion) {
  39. if (postion == 0) {
  40. return 2;
  41. } else {
  42. return 1;
  43. }
  44. }
  45. });
  46. rcv.setLayoutManager(manager);
  47. adapter = new MyRecycleAdapter(RecycleViewWithHead.this, 20);
  48. View view = View.inflate(this, R.layout.head, null);
  49. // 设置当前ViewType
  50. adapter.setSpanSize(RecycleViewWithHead.RECYCLER_VIEW_ITEM_DOUBLE);
  51. adapter.addHeadView(view);
  52. rcv.setAdapter(adapter);
  53. }
  54.  
  55. @Override
  56. public void onClick(View v) {
  57. switch (v.getId()) {
  58. case R.id.iv_switch:
  59. changeRecycleViewList();
  60. break;
  61.  
  62. default:
  63. break;
  64. }
  65.  
  66. }
  67.  
  68. /**
  69. * 改变RecycleView的显示列数
  70. */
  71. private void changeRecycleViewList() {
  72. if (adapter != null) {
  73. int spanSize = adapter.getSpanSize();
  74. // 当前一行显示一列
  75. if (spanSize == RecycleViewWithHead.RECYCLER_VIEW_ITEM_SINGLE) {
  76. manager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
  77. @Override
  78. public int getSpanSize(int position) {
  79. if (adapter.getItemViewType(position) == RecycleViewWithHead.HEADER_RECYCLER_VIEW_ITEM) {
  80. return 2;
  81. } else {
  82. return 1;
  83.  
  84. }
  85. }
  86. });
  87. adapter.setSpanSize(RecycleViewWithHead.RECYCLER_VIEW_ITEM_DOUBLE);
  88. }
  89. // 当前一行显示两列
  90. else if (spanSize == RecycleViewWithHead.RECYCLER_VIEW_ITEM_DOUBLE) {
  91. manager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
  92. @Override
  93. public int getSpanSize(int position) {
  94. if (adapter.getItemViewType(position) == RecycleViewWithHead.HEADER_RECYCLER_VIEW_ITEM) {
  95. return 2;
  96. } else {
  97. return 2;
  98. }
  99. }
  100. });
  101. adapter.setSpanSize(RecycleViewWithHead.RECYCLER_VIEW_ITEM_SINGLE);
  102. }
  103. // 第一个參数是动画開始的位置索引
  104. adapter.notifyItemRangeChanged(2, adapter.getItemCount());
  105. }
  106. }
  107. }

布局文件activity_recycle.xml

  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. xmlns:tools="http://schemas.android.com/tools"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent">
  5.  
  6. <android.support.v7.widget.RecyclerView
  7. android:id="@+id/rcv"
  8. android:layout_width="match_parent"
  9. android:layout_height="wrap_content" />
  10.  
  11. <ImageView
  12. android:id="@+id/iv_switch"
  13. android:layout_width="wrap_content"
  14. android:layout_height="wrap_content"
  15. android:layout_alignParentTop="true"
  16. android:layout_alignParentRight="true"
  17. android:layout_margin="20dp"
  18. android:src="@drawable/more"
  19. />
  20.  
  21. </RelativeLayout>

适配器MyRecycleAdapter.java

  1. import com.example.myrecycleviewdemo.R;
  2. import com.example.myrecycleviewdemo.RecycleViewWithHead;
  3. import com.example.myrecycleviewdemo.R.layout;
  4. import android.content.Context;
  5. import android.support.v7.widget.RecyclerView;
  6. import android.support.v7.widget.RecyclerView.ViewHolder;
  7. import android.view.LayoutInflater;
  8. import android.view.View;
  9. import android.view.View.OnClickListener;
  10. import android.view.ViewGroup;
  11. import android.widget.Toast;
  12.  
  13. public class MyRecycleAdapter extends
  14. RecyclerView.Adapter<MyRecycleAdapterHolder> {
  15.  
  16. public View headView;
  17. public Context mContext;
  18. public int count;
  19. private int spanSize;// 当前每行显示几列
  20.  
  21. public MyRecycleAdapter(Context mContext, int count) {
  22. this.count = count;
  23. this.mContext = mContext;
  24. }
  25.  
  26. /**
  27. * 设置数据源总的条目
  28. */
  29. @Override
  30. public int getItemCount() {
  31. // 返回条目数加头布局个数
  32. return count + 1;
  33. }
  34.  
  35. @Override
  36. public void onBindViewHolder(MyRecycleAdapterHolder holder,
  37. final int position) {
  38. int itemViewType = getItemViewType(position);
  39. // 头部
  40. if (itemViewType == RecycleViewWithHead.HEADER_RECYCLER_VIEW_ITEM) {
  41. return;
  42. } else {// 普通条目
  43. if (itemViewType == RecycleViewWithHead.RECYCLER_VIEW_ITEM_DOUBLE) {// 一行两列视图
  44. holder.iv_item_icon.setOnClickListener(new OnClickListener() {
  45. @Override
  46. public void onClick(View v) {
  47. Toast.makeText(mContext, "2列。" + (position - 1) + "", 0)
  48. .show();
  49. }
  50. });
  51. } else if (itemViewType == RecycleViewWithHead.RECYCLER_VIEW_ITEM_SINGLE) {// 一行一列视图
  52. holder.iv_item_icon_single.setOnClickListener(new OnClickListener() {
  53. @Override
  54. public void onClick(View v) {
  55. Toast.makeText(mContext,"单列," + (position - 1) + "", 0).show();
  56. }
  57. });
  58. }
  59. }
  60. }
  61.  
  62. @Override
  63. public MyRecycleAdapterHolder onCreateViewHolder(ViewGroup parent,
  64. int viewType) {
  65. View root = null;
  66. // 头部
  67. if (viewType == RecycleViewWithHead.HEADER_RECYCLER_VIEW_ITEM) {
  68. root = headView;
  69. } else {// 普通条目
  70. /** 一行显示一条 */
  71. if (viewType == RecycleViewWithHead.RECYCLER_VIEW_ITEM_SINGLE) {
  72. root = LayoutInflater.from(mContext).inflate(R.layout.item_single, parent, false);
  73. }
  74. /** 一行显示两条 */
  75. else {
  76. root = LayoutInflater.from(mContext).inflate(R.layout.item_double, parent, false);
  77. }
  78. }
  79. return new MyRecycleAdapterHolder(root, viewType);
  80. }
  81.  
  82. /**
  83. * 加入自己定义头部
  84. */
  85. public void addHeadView(View view) {
  86. this.headView = view;
  87. }
  88.  
  89. @Override
  90. public int getItemViewType(int position) {
  91.  
  92. if (position == 0) {
  93. return RecycleViewWithHead.HEADER_RECYCLER_VIEW_ITEM;
  94. } else {
  95. /** 一行显示一条 */
  96. if (spanSize == RecycleViewWithHead.RECYCLER_VIEW_ITEM_SINGLE) {
  97. return RecycleViewWithHead.RECYCLER_VIEW_ITEM_SINGLE;
  98. /** 一行显示两条 */
  99. } else {
  100. return RecycleViewWithHead.RECYCLER_VIEW_ITEM_DOUBLE;
  101. }
  102. }
  103. }
  104.  
  105. public int getSpanSize() {
  106. return spanSize;
  107. }
  108.  
  109. public void setSpanSize(int spanSize) {
  110. this.spanSize = spanSize;
  111. }
  112. }



普通条目的ViewHolder

  1. import com.example.myrecycleviewdemo.R;
  2. import com.example.myrecycleviewdemo.R.id;
  3. import com.example.myrecycleviewdemo.RecycleViewWithHead;
  4. import android.support.v7.widget.RecyclerView;
  5. import android.view.View;
  6. import android.widget.ImageView;
  7. import android.widget.TextView;
  8.  
  9. public class MyRecycleAdapterHolder extends RecyclerView.ViewHolder{
  10. //一行两列视图
  11. public ImageView iv_item_icon;
  12. public TextView tv_item;
  13.  
  14. //一行一列视图
  15. public ImageView iv_item_icon_single;
  16. public TextView tv_item_single;
  17.  
  18. public MyRecycleAdapterHolder(View itemView) {
  19. super(itemView);
  20. }
  21. public MyRecycleAdapterHolder(View itemView,int viewType) {
  22. super(itemView);
  23. initView(itemView,viewType);
  24. }
  25. private void initView(View itemView, int viewType) {
  26. if(viewType == RecycleViewWithHead.RECYCLER_VIEW_ITEM_DOUBLE){
  27. iv_item_icon = (ImageView) itemView.findViewById(R.id.iv_item_icon);
  28. tv_item = (TextView) itemView.findViewById(R.id.tv_item);
  29. }else if(viewType == RecycleViewWithHead.RECYCLER_VIEW_ITEM_SINGLE){
  30. iv_item_icon_single = (ImageView) itemView.findViewById(R.id.iv_item_icon_single);
  31. tv_item_single = (TextView) itemView.findViewById(R.id.tv_item_single);
  32. }
  33. }
  34. }

头布局文件head.xm没有不论什么变化

条目的布局拆分为2个item_double.xml和item_single.xml

item_double.xml和之前的item.xml一样。



item_single.xml

  1. <?
  2.  
  3. xml version="1.0" encoding="utf-8"?>
  4. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  5. android:id="@+id/ll_list"
  6. android:layout_width="wrap_content"
  7. android:layout_height="wrap_content"
  8. android:layout_marginLeft="2dp"
  9. android:layout_marginRight="2dp"
  10. android:layout_marginTop="5dp"
  11. android:orientation="horizontal" >
  12.  
  13. <ImageView
  14. android:id="@+id/iv_item_icon_single"
  15. android:layout_width="wrap_content"
  16. android:layout_height="wrap_content"
  17. android:src="@drawable/item" />
  18.  
  19. <TextView
  20. android:id="@+id/tv_item_single"
  21. android:layout_width="wrap_content"
  22. android:layout_height="wrap_content"
  23. android:layout_gravity="center_vertical"
  24. android:layout_marginTop="5dp"
  25. android:text="这是一仅仅熊猫" />
  26.  
  27. </LinearLayout>

源代码地址:http://download.csdn.net/detail/linder_qzy/9491370

android RecycleView复杂多条目的布局的更多相关文章

  1. Android RecycleView多种布局实现(工厂模式)

    RecycleView是个很常用的控件,很多APP中都可以看到它的身影,同时它也是个很难用的控件,主要就难在多种布局的实现. 在<第一行代码—Android>这本书里边有个RecycleV ...

  2. Android RecycleView实现混合Item布局

    首先来看看效果吧: 效果预览.png 本实例来自于慕课网的视屏http://www.imooc.com/video/13046,实现步骤可以自己去观看视屏,这里只记录了下实现的代码. 添加依赖: (1 ...

  3. [Android] Android RecycleView和ListView 自定义Adapter封装类

    在网上查看了很多对应 Android RecycleView和ListView 自定义Adapter封装类 的文章,主要存在几个问题: 一).网上代码一大抄,复制来复制去,大部分都运行不起来,或者 格 ...

  4. Android的学习第六章(布局一LinearLayout)

    今天我们来说一下Android五大布局-LinearLayout布局(线性布局) 含义:线性布局,顾名思义,指的是整个Android布局中的控件摆放方式是以线性的方式摆放的, 主要作用:主要对整个界面 ...

  5. Android开发之详解五大布局

    http://bbs.chinaunix.net/thread-3654213-1-1.html 为了适应各式各样的界面风格,Android系统提供了5种布局,这5种布局分别是: LinearLayo ...

  6. Android中常用的5大布局详述

    Android的界面是有布局和组件协同完成的,布局好比是建筑里的框架,而组件则相当于建筑里的砖瓦.组件按照布局的要求依次排列,就组成了用户所看见的界面. 所有的布局方式都可以归类为ViewGroup的 ...

  7. Android 开发之旅:深入分析布局文件&又是“Hello World!”

    http://www.cnblogs.com/skynet/archive/2010/05/20/1740277.html 引言 上篇可以说是一个分水岭,它标志着我们从Android应用程序理论进入实 ...

  8. android listview需要呈现多个布局

    android listview需要呈现多个布局 之前的做法很笨 在getView()方法里面,不仅将viewHolder作为tag属性设置给convertView 还将当前的position作为ta ...

  9. Android进阶(二十七)Android原生扰人烦的布局

    Android原生扰人烦的布局 在开发Android应用时,UI布局是一件令人烦恼的事情.下面主要讲解一下Android中的界面布局. 一.线性布局(LinearLayout) 线性布局分为: (1) ...

随机推荐

  1. python列出指定目录下的所有目录和文件

    import os import docx def scanfile(rootdir): result = [] for f in os.walk(rootdir): for files in f[2 ...

  2. How to install redis server on CentOS 7 / RHEL 7

    在本教程中,我们将学习如何在CentOS 7 / RHEL 7上安装Redis服务器. redis的缩写是REmote DIctionary Server. 它是最流行的开源,高级键值缓存和存储之一. ...

  3. 设计模式之单例模式 Singleton

    核心作用 保证一个类只有一个实例,并且提供一个访问该实例的全局访问点. 常见应用场景 优点 由于单例模式只生成一个实例,减少了系统性开销,当一个对象的产生需要比较多的资源时,如读取配置,产生其他依赖对 ...

  4. Educational Codeforces Round 36 (Rated for Div. 2)

    A. Garden time limit per test 1 second memory limit per test 256 megabytes input standard input outp ...

  5. Ubuntu搭建Http服务器用于下载Ubuntu文件

    首先安装Apache $ sudo apt-get install apache2 Apache2的默认访问端口为80,当端口被占用时需要更改其访问端口 进入apache2的安装目录  /etc/ap ...

  6. JDBC 学习笔记(七)—— CallableStatement

    在大型关系型数据库中,有一组为了完成特定功能的 SQL 语句集被称为存储过程(Stored Procedure),它是数据库中的对象. JDBC 使用 CallableStatement 对象,完成对 ...

  7. iOS启动动画效果实现

    原理 在window上加一个UIImageView它的图片和启动图的图片一样,然后再调整动画 运行展示 demo百度云连接:http://pan.baidu.com/s/1c0QcYu0 more:网 ...

  8. [bzoj2302][HNOI2011]problem c 递推,dp

    [HAOI2011]Problem c Time Limit: 30 Sec  Memory Limit: 256 MBSubmit: 949  Solved: 519[Submit][Status] ...

  9. Windows connect to mysql failed: can't get hostname for your address

    My mysql is on Linux platform. When I used my laptop connect to mysql, I got error message like &quo ...

  10. scrapy之download middleware

    官方文档:https://docs.scrapy.org/en/latest/topics/downloader-middleware.html 一 write your own downloader ...