recycleview实现瀑布流

来源:互联网 发布:淘宝光辉钢铁军团皮肤 编辑:程序博客网 时间:2024/05/21 09:57

首先实现recycleview瀑布流效果 得到依赖

compile 'com.android.support:recyclerview-v7:25.0.0'
使用OKhttp网络请求框架  请求数据

compile 'com.squareup.okhttp:okhttp:2.4.0'compile 'com.squareup.okio:okio:1.5.0'

图片加载框架   用   picasso

compile 'com.squareup.picasso:picasso:2.5.1'

main  布局

<android.support.v7.widget.RecyclerView    android:id="@+id/rlv"    android:layout_width="match_parent"    android:layout_height="match_parent" />
不多说,,直接导代码

public class MainActivity extends AppCompatActivity {    private RecyclerView rlv;    private int page = 1;    private Handler handler = new Handler() {        @Override        public void handleMessage(Message msg) {            super.handleMessage(msg);            if(msg.what==0){                String s = (String) msg.obj;                Gson gson=new Gson();                User user = gson.fromJson(s, User.class);                if(list==null){                    list = new ArrayList<>();                }                List<ResultsInfo> results = user.results;                list.addAll(results);                //设置适配器                initAdapter();            }        }    };    private int lastVisibleItem;    private StaggeredGridLayoutManager staggeredGridLayoutManager;    private int temp;    private List<ResultsInfo> list;    private void initAdapter() {        //设置瀑布流管理器        staggeredGridLayoutManager = new StaggeredGridLayoutManager(3,StaggeredGridLayoutManager.VERTICAL);        rlv.setLayoutManager(staggeredGridLayoutManager);        //设置适配器        final MyAdapter adapter=new MyAdapter(MainActivity.this,list);        rlv.setAdapter(adapter);        //点击添加        adapter.setOnItemClickListener(new MyAdapter.OnItemClickListener() {            @Override            public void onItemClick(View v) {                //Toast.makeText(MainActivity.this,"好看",Toast.LENGTH_SHORT).show();                ResultsInfo resultsInfo=new ResultsInfo();                resultsInfo.url="http://7xi8d6.com1.z0.glb.clouddn.com/2017-04-11-17881546_248332202297978_2420944671002853376_n.jpg";                int position= rlv.getChildAdapterPosition(v);                adapter.insert(position,resultsInfo);            }        });        //长按删除        adapter.setOnLongItemClickListener(new MyAdapter.OnLongItemClickListener() {            @Override            public void onLongItemClick(View v) {                int position = rlv.getChildAdapterPosition(v);                adapter.del(position);            }        });    }    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        //找控件        rlv = (RecyclerView) findViewById(R.id.rlv);        //获取网络数据        getServerData();        rlv.addOnScrollListener(new RecyclerView.OnScrollListener() {            @Override            public void onScrollStateChanged(RecyclerView recyclerView, int newState) {                super.onScrollStateChanged(recyclerView, newState);                if (newState== RecyclerView.SCROLL_STATE_IDLE&&                        lastVisibleItem+1==list.size()){                    Toast.makeText(MainActivity.this, "加载中。。。。"+lastVisibleItem, Toast.LENGTH_SHORT).show();                    page++;                    getServerData();                }            }            @Override            public void onScrolled(RecyclerView recyclerView, int dx, int dy) {                super.onScrolled(recyclerView, dx, dy);                int[] firstVisibleItemPositions = staggeredGridLayoutManager.findLastVisibleItemPositions(null);                for (int firstVisibleItemPosition : firstVisibleItemPositions) {                    temp = firstVisibleItemPosition;                    if (lastVisibleItem < temp) {                        lastVisibleItem = firstVisibleItemPosition;//标记最后一个显示的postion                    }                }//                lastVisibleItem=layoutManager.findLastVisibleItemPosition();            }        });    }    private void getServerData() {        OkHttpClient client = new OkHttpClient();        String url = "http://gank.io/api/data/福利/10/1" + page;        Request request = new Request.Builder().url(url).build();        Call call = client.newCall(request);        call.enqueue(new Callback() {            @Override            public void onFailure(Request request, IOException e) {            }            @Override            public void onResponse(Response response) throws IOException {                String s = response.body().string();                Message message = Message.obtain();                message.what = 0;                message.obj=s;                handler.sendMessage(message);            }        });    }}适配器
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {    private Context context;    private List<ResultsInfo> list;    //声明接口    public OnItemClickListener onItemClickListener;    public OnLongItemClickListener onLongItemClickListener;    //定义接口    public interface OnItemClickListener{        void onItemClick(View v);    }    public interface OnLongItemClickListener{        void onLongItemClick(View v);    }    //对外提供一个set方法    public void setOnItemClickListener(OnItemClickListener onItemClickListener){        this.onItemClickListener=onItemClickListener;    }    public void setOnLongItemClickListener(OnLongItemClickListener onLongItemClickListener){        this.onLongItemClickListener=onLongItemClickListener;    }    public MyAdapter(Context context, List<ResultsInfo> list) {        this.context = context;        this.list = list;    }    @Override    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {        View view=View.inflate(context, R.layout.recycleview_item,null);        final MyViewHolder holder=new MyViewHolder(view);        view.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                int position = holder.getAdapterPosition();                if(onItemClickListener!=null){                    onItemClickListener.onItemClick(v);                }            }        });        view.setOnLongClickListener(new View.OnLongClickListener() {            @Override            public boolean onLongClick(View v) {                int position = holder.getAdapterPosition();                if(onLongItemClickListener!=null){                    onLongItemClickListener.onLongItemClick(v);                }                return true;            }        });        return holder;    }    @Override    public void onBindViewHolder(MyViewHolder holder, int position) {        Picasso.with(context).load(list.get(position).url).into(holder.image);    }    @Override    public int getItemCount() {        return list.size();    }    public class MyViewHolder extends RecyclerView.ViewHolder{        private final ImageView image;        public MyViewHolder(View itemView) {            super(itemView);            image = (ImageView) itemView.findViewById(R.id.image);        }    }    public void insert(int position, ResultsInfo resultsInfo){        list.add(position,resultsInfo);        notifyItemInserted(position);    }    public void del(int position){        list.remove(position);        notifyItemRemoved(position);    }}
适配器布局
<ImageView    android:id="@+id/image"    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:adjustViewBounds="true"    android:scaleType="centerCrop" />
bean 类
public class ResultsInfo {    public String url;    @Override    public String toString() {        return "ResultsInfo{" +                "url='" + url + '\'' +                '}';    }}
public class User {    public List<ResultsInfo> results;    @Override    public String toString() {        return "User{" +                "results=" + results +                '}';    }}


1 0