import android.graphics.Canvas;
import android.graphics.Rect;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.StaggeredGridLayoutManager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private RecyclerView recyclerView;
private MyAdapter adapter;
public List<Integer> mHeights;
public List<String> mDatas;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initData();
initView();
}
private void initView() {
recyclerView = (RecyclerView) findViewById(R.id.id_recyclerview);
//recyclerView.setLayoutManager(new LinearLayoutManager(this));
//recyclerView.setLayoutManager(new GridLayoutManager(this,4));
recyclerView.setLayoutManager(new StaggeredGridLayoutManager(4,StaggeredGridLayoutManager.VERTICAL));
adapter = new MyAdapter();
recyclerView.setAdapter(adapter);
//recyclerView.addItemDecoration(new DividerItemDecoration(this,DividerItemDecoration.VERTICAL_LIST));
recyclerView.addItemDecoration(new DividerGridItemDecoration(this));
}
private void initData() {
mDatas = new ArrayList<String>();
for (int i = 'A';i < 'z';i++){
mDatas.add("" + (char)i);
}
mHeights = new ArrayList<>();
for (int i = 0;i<mDatas.size();i++){
mHeights.add((int) (100 + Math.random()*300));
}
}
/**
* 1.适配器实现专门的RecyclerView的adapter
* 2.传入一个viewHolder对象(一般是自己定义)
* 3.创建一个自己类MyViewHolder实现Viewholder
* 4.MyViewHolder得到的就是item中的布局,并实例化组件
* 5.onCreateViewHolder中实例化自己的holder对象,并返回给onBindViewHolder
* 6.onBindViewHolder()中通过holder对象来使用item中的组件
*/
class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder>{
@Override
public MyAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
MyViewHolder holder = new MyViewHolder(LayoutInflater.from(MainActivity.this)
.inflate(R.layout.layout,parent,false));
return holder;
}
@Override
public void onBindViewHolder(MyAdapter.MyViewHolder holder, int position) {
ViewGroup.LayoutParams layoutParams = holder.itemView.getLayoutParams();
layoutParams.height = mHeights.get(position);
holder.itemView.setLayoutParams(layoutParams);
holder.tv.setText(mDatas.get(position));
}
@Override
public int getItemCount() {
return mDatas.size();
}
class MyViewHolder extends RecyclerView.ViewHolder {
TextView tv;
public MyViewHolder(View itemView) {
super(itemView);
tv = itemView.findViewById(R.id.id_num);
}
}
}
}
最终效果如图