效果图:
项目结构:
引用库
// gradlecompile ('com.alibaba.android:vlayout:1.0.1@aar') {
transitive = true}
MainActivity中
package android.zhh.com.myvlayout;
import android.app.Activity;
import android.graphics.Rect;
import android.os.Handler;
import android.os.Looper;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.RecyclerView;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.alibaba.android.vlayout.DelegateAdapter;
import com.alibaba.android.vlayout.LayoutHelper;
import com.alibaba.android.vlayout.VirtualLayoutAdapter;
import com.alibaba.android.vlayout.VirtualLayoutManager;
import com.alibaba.android.vlayout.layout.DefaultLayoutHelper;
import com.alibaba.android.vlayout.layout.FixLayoutHelper;
import com.alibaba.android.vlayout.layout.GridLayoutHelper;
import com.alibaba.android.vlayout.layout.ScrollFixLayoutHelper;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
/**
* vlayout的简单例子
*/
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 初始化RecyclerView
final RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recycler_view);
final VirtualLayoutManager layoutManager = new VirtualLayoutManager(this);
recyclerView.setLayoutManager(layoutManager);
// 设置回收复用池
RecyclerView.RecycledViewPool viewPool = new RecyclerView.RecycledViewPool();
recyclerView.setRecycledViewPool(viewPool);
viewPool.setMaxRecycledViews(0, 10);
// 条目之间的间距
recyclerView.addItemDecoration(new RecyclerView.ItemDecoration() {
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
outRect.set(10, 10, 10, 10);
}
});
// 创建helpers对象,并放入数据
final List helpers = new LinkedList<>();
// 设置Grid每行4列,一共25个条目
final GridLayoutHelper gridLayoutHelper = new GridLayoutHelper(4);
gridLayoutHelper.setItemCount(25);
// 前7个条目默认布局
helpers.add(DefaultLayoutHelper.newHelper(7));
// 7个条目之后的25个条目是Grid布局
helpers.add(gridLayoutHelper);
// 之后的布局是默认布局
// 把helpers放入
layoutManager.setLayoutHelpers(helpers);
// 绑定数据
MyAdapter myAdapter=new MyAdapter(layoutManager,MainActivity.this,getData());
recyclerView.setAdapter(myAdapter);
}
private ArrayList getData(){
ArrayListlist=new ArrayList<>();
for(int i = 0; i <100 ; i++) {
list.add("zhh");
}
return list;
}
}activity_main.xml中
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:orientation="vertical"
>
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#aaaaaa"
android:clipToPadding="true"
android:paddingLeft="0dp"
android:paddingRight="0dp"
android:requiresFadingEdge="none"
android:scrollbars="vertical"/>
MyAdapter中package android.zhh.com.myvlayout;import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.alibaba.android.vlayout.DelegateAdapter;
import com.alibaba.android.vlayout.LayoutHelper;
import com.alibaba.android.vlayout.VirtualLayoutAdapter;
import com.alibaba.android.vlayout.VirtualLayoutManager;
import java.util.ArrayList;
/**
* 创建的适配器
*/
public class MyAdapter extends VirtualLayoutAdapter {
Context context;
ArrayListlist;
public MyAdapter(VirtualLayoutManager layoutManager,Context context,ArrayListlist) {
super(layoutManager);
this.context=context;
this.list=list;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
MyViewHolder holder = new MyViewHolder(LayoutInflater.from(
context).inflate(R.layout.item_layout, parent,
false));
return holder;
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
holder.tv.setText(list.get(position)+position+"");
if (position > 35) {
holder.tv.setBackgroundColor(0x66cc0000 + (position - 30) * 128);
} else if (position % 2 == 0) {
holder.tv.setBackgroundColor(0xaa00ff00);
} else {
holder.tv.setBackgroundColor(0xccff00ff);
}
}
@Override
public int getItemCount() {
return list.size();
}
/**
* ViewHolder的类,用于缓存控件
*/
class MyViewHolder extends RecyclerView.ViewHolder {
TextView tv;
public MyViewHolder(View view) {
super(view);
tv = (TextView) view.findViewById(R.id.tvMy);
}
}
}item_layout.xml<?xml version="1.0" encoding="utf-8"?>
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
android:id="@+id/tvMy"
android:layout_width="match_parent"
android:layout_height="20dp"
android:text="zhh1" />
源码下载:http://download.csdn.net/detail/zhaihaohao1/9794338