RecyclerView布局+瀑布流

本文介绍了一个使用 Android RecyclerView 控件的应用实例,包括不同类型的布局管理器、适配器的实现及图片加载库的集成,展示了如何通过 Glide 和 Universal Image Loader 加载网络图片。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

            <build.gradle导包>
            apply plugin: 'com.android.application'

            android {
                compileSdkVersion 25
                buildToolsVersion "26.0.1"

                defaultConfig {
                    applicationId "com.example.adminjs.jiao1108"
                    minSdkVersion 15
                    targetSdkVersion 25
                    versionCode 1
                    versionName "1.0"
                }
                buildTypes {
                    release {
                        minifyEnabled false
                        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
                    }
                }
            }

            dependencies {
                compile fileTree(dir: 'libs', include: ['*.jar'])
                testCompile 'junit:junit:4.12'
                compile 'com.android.support:appcompat-v7:25.+'
                compile 'com.github.liuguangqiang.SuperRecyclerView:super-recyclerview:0.1.2'
                compile 'com.jakewharton:butterknife:8.8.1'
                compile 'com.jakewharton:butterknife-compiler:8.8.1'
                compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.5'
                compile 'com.liaoinstan.springview:library:1.3.0'
                compile  'com.github.bumptech.glide:glide:3.7.0'
            }

            <清单列表请求网络>
            <?xml version="1.0" encoding="utf-8"?>
            <manifest xmlns:android="http://schemas.android.com/apk/res/android"
                package="com.example.adminjs.jiao1108">
                <uses-permission android:name="android.permission.INTERNET"/>
                <application
                    android:allowBackup="true"
                    android:icon="@mipmap/ic_launcher"
                    android:label="@string/app_name"
                    android:supportsRtl="true"
                    android:theme="@style/AppTheme">
                    <activity android:name=".MainActivity">
                        <intent-filter>
                            <action android:name="android.intent.action.MAIN" />

                            <category android:name="android.intent.category.LAUNCHER" />
                        </intent-filter>
                    </activity>
                </application>

            </manifest>

            <activity_main.xml布局>
            <?xml version="1.0" encoding="utf-8"?>
            <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                xmlns:tools="http://schemas.android.com/tools"
                android:layout_width="match_parent"
                android:layout_height="match_parent">
               <com.liaoinstan.springview.widget.SpringView
                   android:layout_width="match_parent"
                   android:layout_height="match_parent"
                   android:id="@+id/springview">
                   <android.support.v7.widget.RecyclerView
                       android:layout_width="match_parent"
                       android:layout_height="match_parent"
                       android:id="@+id/recyclerview">
                   </android.support.v7.widget.RecyclerView>
               </com.liaoinstan.springview.widget.SpringView>

            </RelativeLayout>

            <layout_fitem.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:gravity="center"
                android:orientation="vertical">


                <ImageView
                    android:src="@mipmap/ic_launcher"
                    android:id="@+id/item_simageview"
                    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_stextview"/>


            </LinearLayout>

            <layout_item布局>
            <?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>

            《layout_sitem》
            <?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:gravity="center"
                android:orientation="vertical">


                <ImageView
                    android:src="@mipmap/ic_launcher"
                    android:scaleType="centerCrop"
                    android:id="@+id/item_simageview"
                    android:layout_width="match_parent"
                    android:layout_height="100dp" />
            </LinearLayout>

            <MainActivity主页面>

            package muhanxi.recycleview;

    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.GridLayoutManager;
    import android.support.v7.widget.LinearLayoutManager;
    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 com.liaoinstan.springview.container.DefaultFooter;
    import com.liaoinstan.springview.container.DefaultHeader;
    import com.liaoinstan.springview.widget.SpringView;
    import com.yqritc.recyclerviewflexibledivider.HorizontalDividerItemDecoration;

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

    public class MainActivity extends Activity {

        private RecyclerView recyclerView;
        private List<String> list = new ArrayList<>();
        private SpringView springView;
        private LinearLayoutManager linearLayoutManager;

        @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");



            // 设置布局管理器
    //        new GridLayoutManager()  九宫格布局管理器
    //        new LinearLayoutManager() listview 布局管理器
    //
    //        new StaggeredGridLayoutManager() 瀑布流 布局管理器


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



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

            MultiAdapter adapter =  new MultiAdapter(this,list) ;

            linearLayoutManager = new LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false);
            recyclerView.setLayoutManager(linearLayoutManager);
            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.setOnScrollListener(new RecyclerView.OnScrollListener() {
                @Override
                public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
                    super.onScrollStateChanged(recyclerView, newState);


    //                linearLayoutManager.findFirstVisibleItemPosition()


                }

                @Override
                public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
                    super.onScrolled(recyclerView, dx, dy);
                }
            });

    //        recyclerView.setOnI



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


            springView = (SpringView) findViewById(R.id.springview);

            springView.setHeader(new DefaultHeader(this));
            springView.setFooter(new DefaultFooter(this));


            springView.setListener(new SpringView.OnFreshListener() {
                @Override
                public void onRefresh() {
                    //下啦

                    springView.onFinishFreshAndLoad();
                }

                @Override
                public void onLoadmore() {
    // 上啦
                    springView.onFinishFreshAndLoad();

                }
            });





    //        adapter.notifyDataSetChanged();



        }



    }


            《IApplication页面》
            package com.example.adminjs.jiao1108;

            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 );

                }
            }



            <MultiAdapter适配器>
            package com.example.adminjs.jiao1108;

            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.ImageView;
            import android.widget.TextView;

            import com.bumptech.glide.Glide;

            import java.util.List;

            import butterknife.BindView;
            import butterknife.ButterKnife;


            /**
             * Created by CZ on 2017/11/8.
             */
            public class MultiAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
                private Context context;
                private List<String> list;

                public MultiAdapter(Context context, List<String> list) {
                    this.context = context;
                    this.list = list;
                }
                @Override
                public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

                    if (viewType == 0) {

                        View view = LayoutInflater.from(context).inflate(R.layout.layout_fitem,parent, false);
                        return new FViewHolder(view);

                    } else {
                        View view = LayoutInflater.from(context).inflate(R.layout.layout_sitem, parent, false);

                        return new SViewHolder(view);

                    }


                }


                @Override
                public int getItemViewType(int position) {
                    return position % 2 ;
                }

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




                    if(holder instanceof FViewHolder){

                        FViewHolder fViewHolder = (FViewHolder)holder ;
                        fViewHolder.itemStextview.setText(position+"");
                        Glide.with(context).load(list.get(position)).into(fViewHolder.itemSimageview);

            //            ImageLoader.getInstance().displayImage(list.get(position),fViewHolder.itemSimageview);


                    } else {

                        SViewHolder sViewHolder = (SViewHolder)holder ;
                        Glide.with(context).load(list.get(position)).into(sViewHolder.itemSimageview);

            //            ImageLoader.getInstance().displayImage(list.get(position),sViewHolder.itemSimageview);

                    }


                }

                @Override
                public int getItemCount() {
                    return list.size();
                }



                static class FViewHolder extends RecyclerView.ViewHolder{
                    @BindView(R.id.item_simageview)
                    ImageView itemSimageview;
                    @BindView(R.id.item_stextview)
                    TextView itemStextview;

                    FViewHolder(View view) {
                        super(view);
                        ButterKnife.bind(this, view);
                    }
                }

                class SViewHolder extends RecyclerView.ViewHolder{
                    @BindView(R.id.item_simageview)
                    ImageView itemSimageview;

                    SViewHolder(View view) {
                        super(view);
                        ButterKnife.bind(this, view);
                    }
                }
            }

            《RecyclerViewAdapter适配器》

            package com.example.adminjs.jiao1108;

            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.TextView;

            import com.bumptech.glide.Glide;

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

            import butterknife.BindView;
            import butterknife.ButterKnife;

            /**
             * 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, parent,false);
                    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);


                    Glide.with(context).load(list.get(position)).into(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适配器>
            package com.example.adminjs.jiao1108;

            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;
                }
            }
1. 用户与权限管理模块 角色管理: 学生:查看实验室信息、预约设备、提交耗材申请、参与安全考核 教师:管理课题组预约、审批学生耗材申请、查看本课题组使用记录 管理员:设备全生命周期管理、审核预约、耗材采购与分发、安全检查 用户操作: 登录认证:统一身份认证(对接学号 / 工号系统,模拟实现),支持密码重置 信息管理:学生 / 教师维护个人信息(联系方式、所属院系),管理员管理所有用户 权限控制:不同角色仅可见对应功能(如学生不可删除设备信息) 2. 实验室与设备管理模块 实验室信息管理: 基础信息:实验室编号、名称、位置、容纳人数、开放时间、负责人 功能分类:按学科(计算机实验室 / 电子实验室 / 化学实验室)标记,关联可开展实验类型 状态展示:实时显示当前使用人数、设备运行状态(正常 / 故障) 设备管理: 设备档案:名称、型号、规格、购置日期、单价、生产厂家、存放位置、责任人 全生命周期管理: 入库登记:管理员录入新设备信息,生成唯一资产编号 维护记录:记录维修、校准、保养信息(时间、内容、执行人) 报废处理:登记报废原因、时间,更新设备状态为 "已报废" 设备查询:支持按名称、型号、状态多条件检索,显示设备当前可用情况 3. 预约与使用模块 预约管理: 预约规则:学生可预约未来 7 天内的设备 / 实验室,单次最长 4 小时(可设置) 预约程:选择实验室→选择设备→选择时间段→提交申请(需填写实验目的) 审核机制:普通实验自动通过,高危实验(如化学实验)需教师审核 使用记录: 签到 / 签退:到达实验室后扫码签到,离开时签退,系统自动记录实际使用时长 使用登记:填写实验内容、设备运行情况(正常 / 异常),异常情况需详细描述 违规管理:迟到 15 分钟自动取消预约,多次违规限制预约权限 4. 耗材与安全管理模块 耗材管理: 耗材档案:名称、规格、数量、存放位置、
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值