RecyclerView 瀑布流显示图片

该博客介绍如何在Android中利用RecyclerView和StaggeredGridLayoutManager创建一个显示图片的瀑布流布局。博主展示了如何设置布局管理器,加载图片链接,并实现了点击和长按事件。
摘要由CSDN通过智能技术生成

需要导入依赖

image-loader

butterknife

butterknife-compile

recyclerView

加一个网络请求权限

layout_item.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">
    
    
    <ImageView
        android:src="@mipmap/ic_launcher"
        android:scaleType="centerCrop"
        android:id="@+id/item_imageview"
        android:layout_width="match_parent"
        android:layout_height="100dp" />

    <TextView

        android:background="@color/colorPrimary"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/item_textview"/>


</LinearLayout>



activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/recyclerview"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</LinearLayout>



IApplication.java

package com.lianxi2;

import android.app.Application;

import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;

/**
 * Created by muhanxi on 17/11/8.
 */

public class IApplication extends Application {

    @Override
    public void onCreate() {
        super.onCreate();

        ImageLoaderConfiguration configuration =
                new ImageLoaderConfiguration.Builder(this).build();
        ImageLoader.getInstance().init(configuration );

    }
}


RecyclerViewAdapter.java

package com.lianxi2;

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

import java.util.List;
import java.util.Random;

import butterknife.BindView;
import butterknife.ButterKnife;

import static java.security.AccessController.getContext;

/**
 * Created by muhanxi on 17/11/8.
 */

public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.ImageViewHolder> {

    private Context context;
    private List<String> list;
    private int itemWidth ;


    public RecyclerViewAdapter(Context context, List<String> list) {
        this.context = context;
        this.list = list;
        WindowManager wm = (WindowManager) context
                .getSystemService(Context.WINDOW_SERVICE);

        int width = wm.getDefaultDisplay().getWidth();
        itemWidth = width / 3 ;

    }

    //创建ViewHolder
    @Override
    public ImageViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        // 创建一个View
        View view = LayoutInflater.from(context).inflate(R.layout.layout_item, null);
        return new ImageViewHolder(view);
    }

    // 绑定view 显示数据
    @Override
    public void onBindViewHolder(ImageViewHolder holder, final int position) {



        // 显示图片
//        Glide.with(context).load("https://car3.autoimg.cn/cardfs/product/g18/M12/51/43/1024x0_1_q87_autohomecar__wKgH2VjnqU-AHth4AAiGLIUNYJk190.jpg").into(holder.itemImageview);


        ViewGroup.LayoutParams params =  holder.itemImageview.getLayoutParams() ;

        int itemHeight = 300 ;

        itemHeight = new Random().nextInt(500);
        if(itemHeight < 300){
            itemHeight = 300 ;
        }

        params.width = itemWidth ;
        params.height = itemHeight ;

        holder.itemImageview.setLayoutParams(params);

        holder.itemImageview.setImageResource(R.mipmap.ic_launcher);

//        ImageLoader.getInstance().displayImage(list.get(position),holder.itemImageview);

        holder.textView.setText(position+"");


        holder.itemImageview.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(listener != null){
                    listener.onClick(view,position);
                }
            }
        });



        holder.itemImageview.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View view) {
                listener.longClick(view,position);
                return false;
            }
        });

    }

    // 获取条目的个数
    @Override
    public int getItemCount() {
        return list.size();
    }


    static class ImageViewHolder extends RecyclerView.ViewHolder {

        @BindView(R.id.item_imageview)
        ImageView itemImageview;

        @BindView(R.id.item_textview)
        TextView textView;
        public ImageViewHolder(View itemView) {
            super(itemView);
            ButterKnife.bind(this, itemView);

//            itemImageview = itemView.findViewById(R.id.item_imageview);

        }

    }


    private Listener listener ;
    public void setIListener(Listener listener){
        this.listener = listener;
    }

    public interface  Listener {
        public void onClick(View view, int position);
        public void longClick(View view, int position);
    }


}



TestAdapter.java

package com.lianxi2;

import android.support.v7.widget.RecyclerView;
import android.view.ViewGroup;

/**
 * Created by muhanxi on 17/11/8.
 */

public class TestAdapter extends RecyclerView.Adapter {
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        return null;
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {

    }

    @Override
    public int getItemCount() {
        return 0;
    }
}


MainActivit.java
package com.lianxi2;


import android.app.Activity;
import android.graphics.Color;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.RequiresApi;

import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.StaggeredGridLayoutManager;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.Toast;


import java.util.ArrayList;
import java.util.List;

public class MainActivity extends Activity {

    private RecyclerView recyclerView;
    private List<String> list = new ArrayList<>();

    @RequiresApi(api = Build.VERSION_CODES.GINGERBREAD)
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        recyclerView = (RecyclerView) findViewById(R.id.recyclerview);


        list.add("http://f10.baidu.com/it/u=2881303562,336932824&fm=72");
        list.add("http://f11.baidu.com/it/u=681755471,2018070071&fm=72");
        list.add("http://f10.baidu.com/it/u=960650584,863938083&fm=72");
        list.add("http://img0.imgtn.bdimg.com/it/u=783060973,4278100629&fm=27&gp=0.jpg");
        list.add("http://img1.imgtn.bdimg.com/it/u=3743124979,3234956668&fm=27&gp=0.jpg");
        list.add("http://img4.imgtn.bdimg.com/it/u=3468613159,957707785&fm=27&gp=0.jpg");
        list.add("http://img3.imgtn.bdimg.com/it/u=2971205354,485034289&fm=27&gp=0.jpg");


        list.add("http://f10.baidu.com/it/u=2881303562,336932824&fm=72");
        list.add("http://f11.baidu.com/it/u=681755471,2018070071&fm=72");
        list.add("http://f10.baidu.com/it/u=960650584,863938083&fm=72");
        list.add("http://img0.imgtn.bdimg.com/it/u=783060973,4278100629&fm=27&gp=0.jpg");
        list.add("http://img1.imgtn.bdimg.com/it/u=3743124979,3234956668&fm=27&gp=0.jpg");
        list.add("http://img4.imgtn.bdimg.com/it/u=3468613159,957707785&fm=27&gp=0.jpg");
        list.add("http://img3.imgtn.bdimg.com/it/u=2971205354,485034289&fm=27&gp=0.jpg");

//        recyclerView.setLayoutManager(new GridLayoutManager(this,5));


        recyclerView.setLayoutManager(new StaggeredGridLayoutManager(3, LinearLayout.VERTICAL));
        RecyclerViewAdapter adapter = new RecyclerViewAdapter(this, list);
//        recyclerView.setLayoutManager(new LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false));
        recyclerView.setAdapter(adapter);

        adapter.setIListener(new RecyclerViewAdapter.Listener() {
            @Override
            public void onClick(View view, int position) {
                Toast.makeText(MainActivity.this, "" + position, Toast.LENGTH_SHORT).show();
            }

            @Override
            public void longClick(View view, int position) {

            }
        });

//        recyclerView.setOnI


//        recyclerView.addItemDecoration(new HorizontalDividerItemDecoration.Builder(this)
//        .color(Color.RED).build());


    }
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值