recycleview实现瀑布流

首先实现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 +
                '}';
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值