RecyclerView控件实现横向滚动和瀑布流布局,以及RecyclerView的点击监听(项目已上传GitHub)

RecyclerView实现横向滑动 使用RecyclerView实现简单的横向滑动 阅读详情

先附上我的GitHub项目地址:

https://github.com/Skymqq/RecyclerViewTest.git

 

我们已经知道,ListView的拓展性不好,它只能实现纵向的滚动的效果,如果想进行横向滚动的效果,ListView就做不到了,毫无疑问,RecyclerView是可以做到的。

fruit_item.xml列表项布局文件代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="100dp"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <ImageView
        android:id="@+id/iv_name"
        android:layout_width="40dp"
        android:layout_height="40dp"
        android:layout_gravity="center_horizontal" />

    <TextView
        android:id="@+id/tv_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="10dp" />

</LinearLayout>

可以看到,我们将LinearLayout改成垂直方向排列,并且把宽度设置为100dp。这里将宽度指定为固定值是因为每种水果的文字长度不一致,如果用wrap_content,RecyclerView的子项就会有长有短,非常不美观;而如果使用match_parent,就会导致宽度过长,一个子项占满了整个屏幕。

然后将ImageView和TextView都设置成了在布局中水平居中,并且使用layout_marginTop属性让文字和图片之间保持一些距离。

MainActivity.java代码:

package com.example.administrator.activitydemo;

import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;

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

public class MainActivity extends AppCompatActivity {
    private RecyclerView recyclerView;
    private String[] data = {"Apple", "Banana", "Orange", "Watermelon",
            "Pear", "Grape", "Pineapple", "Strawberry", "Cherry", "Mango",
            "Apple", "Banana", "Orange", "Watermelon",
            "Pear", "Grape", "Pineapple", "Strawberry", "Cherry", "Mango"
    };
    private int[] res = {R.drawable.apple, R.drawable.banana, R.drawable.orange, R.drawable.watermelon,
            R.drawable.pear, R.drawable.grape, R.drawable.pineapple, R.drawable.strawberry, R.drawable.cherry, R.drawable.mango,
            R.drawable.apple, R.drawable.banana, R.drawable.orange, R.drawable.watermelon,
            R.drawable.pear, R.drawable.grape, R.drawable.pineapple, R.drawable.strawberry, R.drawable.cherry, R.drawable.mango};
    private List<Fruit> fruitList;


    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();//初始化UI控件
        initData();//初始化数据
    }


    private void initView() {
        recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
    }

    private void initData() {
        initFruits();//初始化水果数据
        LinearLayoutManager layoutManager = new LinearLayoutManager(MainActivity.this);//实例化布局管理器
        layoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);//为布局管理器设定线性方向
        recyclerView.setLayoutManager(layoutManager);//为RecyclerView控件设置布局管理器
        FruitAdapter adapter = new FruitAdapter(fruitList);//实例化适配器
        recyclerView.setAdapter(adapter);//为RecyclerView控件设置适配器
    }

    private void initFruits() {
        fruitList = new ArrayList<>();
        for (int i = 0; i < data.length; i++) {
            Fruit fruit = new Fruit(data[i], res[i]);
            fruitList.add(fruit);
        }
    }

}


效果图:

MainActivity.java中加入了一行代码,调用LinearLayoutManager的setOrientation()方法来设置布局的排列方向,默认是纵向排列的,我们传入的LinearLayoutManager.HORIZONTAL表示让布局横行排列,这样RecyclerView就可以横向滚动了。

为什么ListView很难或者根本无法实现的效果在RecyclerView上这么轻松就能实现了呢?

这主要得益于RecyclerView出色的设计。ListView的布局排列是由自身去管理的,而RecyclerView则将这个工作交给了LayoutManager,LayoutManager中制定了一套可拓展的布局排列接口,子类只要按照接口的规范来实现,就能定制出各种不同排列方式的布局了。

除了LinearLayoutManager之外,RecyclerView还给我们提供了GridLayoutManager和StaggeredGridLayoutManager这两种内置的布局排列方式。GridLayoutManager可以用于实现网络布局,StaggeredGridLayoutManager可以用于实现瀑布流布局。这里我们来实现一下效果更加酷炫的瀑布流布局。

fruit_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:layout_margin="5dp"
    android:orientation="vertical">

    <ImageView
        android:id="@+id/iv_name"
        android:layout_width="40dp"
        android:layout_height="40dp"
        android:layout_gravity="center_horizontal" />

    <TextView
        android:id="@+id/tv_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="left"
        android:layout_marginTop="10dp" />

</LinearLayout>

这里做了几处小的调整,首先将LinearLayout的宽度由100dp改成了match_parent,因为瀑布流布局的宽度应该是根据布局的列数来自动适配的,而不是一个固定值。另外我们使用了layout_margin属性来让子项之间互留一点间距,这样就不至于所有子项都紧贴在一起。还有就是将TextView的对其属性改成了居左对齐,因为待会我们会将文字的长度变长,如果还是居中就会很怪。

MainActivity.java代码:

package com.example.administrator.activitydemo;

import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.StaggeredGridLayoutManager;

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

public class MainActivity extends AppCompatActivity {
    private RecyclerView recyclerView;
    private String[] data = {"Apple", "Banana", "Orange", "Watermelon",
            "Pear", "Grape", "Pineapple", "Strawberry", "Cherry", "Mango",
            "Apple", "Banana", "Orange", "Watermelon",
            "Pear", "Grape", "Pineapple", "Strawberry", "Cherry", "Mango"
    };
    private int[] res = {R.drawable.apple, R.drawable.banana, R.drawable.orange, R.drawable.watermelon,
            R.drawable.pear, R.drawable.grape, R.drawable.pineapple, R.drawable.strawberry, R.drawable.cherry, R.drawable.mango,
            R.drawable.apple, R.drawable.banana, R.drawable.orange, R.drawable.watermelon,
            R.drawable.pear, R.drawable.grape, R.drawable.pineapple, R.drawable.strawberry, R.drawable.cherry, R.drawable.mango};
    private List<Fruit> fruitList;


    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();//初始化UI控件
        initData();//初始化数据
    }


    private void initView() {
        recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
    }

    private void initData() {
        initFruits();//初始化水果数据
        StaggeredGridLayoutManager layoutManager = new StaggeredGridLayoutManager(3, StaggeredGridLayoutManager.VERTICAL);//3列,垂直
        recyclerView.setLayoutManager(layoutManager);//为RecyclerView控件设置布局管理器
        FruitAdapter adapter = new FruitAdapter(fruitList);//实例化适配器
        recyclerView.setAdapter(adapter);//为RecyclerView控件设置适配器
    }

    private void initFruits() {
        fruitList = new ArrayList<>();
        for (int i = 0; i < data.length; i++) {
            Fruit fruit = new Fruit(getRandomLengthName(data[i]), res[i]);
            fruitList.add(fruit);
        }
    }

    private String getRandomLengthName(String name) {
        Random random = new Random();
        int length = random.nextInt(20) + 1;//取0~20之间的一个随机数
        StringBuilder builder = new StringBuilder();
        for (int i = 0; i < length; i++) {
            builder.append(name);//字符串拼接
        }
        return builder.toString();
    }

}


效果图:

这里的水果的名字长短都是随机生成的,所以当我们再次运行一次程序,效果图又会不一样的。

 

RecyclerView的点击事件:

和ListView一样,RecyclerView也必须要能响应点击事件才可以,不然的话就没什么实际用途了。不过不同于ListView的是,RecyclerView并没有提供类似于setOnClickListener()这样的注册监听方法,而是需要我们自己给子项具体的View去注册点击事件,相比于ListView来说,实现起来要复杂一些。

那么你可能就有疑问了,为什么RecyclerView在各个方面的设计都要优于ListView,偏偏在点击事件上却没有处理得非常好呢?其实不是这样的,ListView在点击事件上的处理并不人性化,setOnClickListener()方法注册的是子项的点击事件,但如果我想点击的是子项里具体的某一个按钮呢?虽然ListView也是能够做到的,但是实现起来就比较麻烦了。为此,RecyclerView干脆直接摒弃了子项点击事件的监听器,所有的点击事件都由具体的View去注册,就再没有这个困扰了。

下面我们来具体学习一下如何在RecyclerView中注册点击事件,修改FruitAdapter中的代码,如下所示:

package com.example.administrator.activitydemo;

import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import java.util.List;

public class FruitAdapter extends RecyclerView.Adapter<FruitAdapter.ViewHolder> {

    private List<Fruit> fruitList;

    public FruitAdapter(List<Fruit> fruitList) {
        this.fruitList = fruitList;
    }

    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.fruit_item, viewGroup, false);
        final ViewHolder viewHolder = new ViewHolder(view);
        viewHolder.iv_name.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                int position = viewHolder.getAdapterPosition();
                Fruit fruit = fruitList.get(position);
                Toast.makeText(v.getContext(), "you clicked ImageView: " + fruit.getName(), Toast.LENGTH_SHORT).show();
            }
        });
        viewHolder.tv_name.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                int position = viewHolder.getAdapterPosition();
                Fruit fruit = fruitList.get(position);
                Toast.makeText(v.getContext(), "you clicked TextView: " + fruit.getName(), Toast.LENGTH_SHORT).show();
            }
        });

        return viewHolder;
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder viewHolder, int i) {
        Fruit fruit = fruitList.get(i);
        viewHolder.iv_name.setImageResource(fruit.getImageId());
        viewHolder.tv_name.setText("" + fruit.getName());
    }

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

    static class ViewHolder extends RecyclerView.ViewHolder {
        View fruitView;
        ImageView iv_name;
        TextView tv_name;

        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            fruitView = itemView;
            iv_name = (ImageView) itemView.findViewById(R.id.iv_name);
            tv_name = (TextView) itemView.findViewById(R.id.tv_name);
        }
    }


}

我们先是修改了内部类ViewHolder,在这个内部类中声名了一个View类的变量fruitView,并且在其构造函数里面为fruitView初始化了,其次我们在onCreateView()函数中通过获得的View实例来获得我们点击屏幕适配器当前的位置,然后根据适配器的位置,在List列表中找到对应的Fruit实例,最后通过Fruit实例获得水果的名称。最终,分别为ImageView和TextView设置点击监听,Toast提示出水果的名称,这样也可以根据Toast提示,很清晰地分辨我们点击的是文字还是图片。

点击图片后的效果图:

点击文字后的效果图:

 

 

 

Android实现RecyclerView横向滑动 在上述代码中,我们创建了一个LinearLayoutManager,并将其设置为RecyclerView的布局管理器。在上述代码中,我们定义了一个MyViewHolder继承自RecyclerView.ViewHolder,并在其中获取Item布局中的TextView控件。在HorizontalSpaceItemDecoration中,我们重写了getItemOffsets()方法,在该方法中可以设置Item之间的间距。上述代码中,我们通过设置outRect.right的值来设置Item的右边间距。 阅读详情

相关推荐

实现可横竖滑动的自定义RecyclerView

通常情况下,RecyclerView默认是垂直滑动的,但有时候我们需要实现横向滑动的效果。通过对触摸事件的处理,我们可以判断滑动的方向并灵活地拦截触摸事件,从而实现横向滑动的效果。在上述代码中,我们记录了触摸事件的初始坐标,并根据横向滑动的距离与纵向滑动的距离的大小关系来判断是否横向滑动。如果横向滑动的距离大于纵向滑动的距离,则将拦截触摸事件,并请求父容器不要拦截触摸事件。这样就实现了可横向滑动的效果。在该方法中,我们将根据滑动的方向来决定是否拦截触摸事件,并处理横向滑动的逻辑。

2301_79325657的博客 434

安卓用RecyclerView实现横向滑动列表

背景 通常我们遇到的是纵向滑动列表,但是也会有横向滑动列表.那横向的怎么做呢? 解决方案 起始很简单,绝大部分代码和纵向是一样的,只有一个设置不一样. 实现效果 关键代码 recyclerView.layoutManager = LinearLayoutManager(this, RecyclerView.HORIZONTAL, false) 完整代码 1). MainActivity....

蓝不蓝编程 1万+

Android中RecyclerView实现横向滑动代码

RecyclerView 是Android L版本中新添加的一个用来取代ListView的SDK,它的灵活性与可替代性比listview更好。本文给大家介绍Android中RecyclerView实现横向滑动代码,一起看看吧。 android.support.v7.widget.RecyclerView 功能:RecyclerView横向滑动 控件:<android> Java类:RecyclerView、GalleryAdapter、List<Integer> 1、主界面布局 <?xml version=1.0 enco

【Android】RecyclerView实现表格上下左右、横向纵向双向滑动效果

Android屏幕显示范围有限,在数据可视化需求中经常要使用这样的表格:横向纵向都能滑动,左侧栏目固定,右边可以整体上下左右滑动。例如股票、证券、课程表、值日表、Excel等等 主要就是分为 标题 和 内容 两部分,其中内容部分一般都是嵌套RecyclerView,使得标题和内容左右横向滑动时是一起滑动的,且不能错位。

full courage的博客 5208

Autodesk软件网络授权破解

Autodesk 全系列产品网络授权破解 此网络许可授权破解文件及方法适用Autodesk 绝大部分的产品, 安装网络许可证管理器Autodesk网络许可证管理器x64位官方下载地址( https://knowledge.autodesk.com/sites/default/files/file_downloads/nlm11.14.1.3_ipv4_ipv6_win64.msi ) Autod...

weixin_33919950的博客 8254

癌症免疫治疗预测神器TIDE:从原理到实战(避坑指南)

本文详细解析了癌症免疫治疗预测工具TIDE的核心原理及实战应用。TIDE算法通过模拟肿瘤免疫逃逸的两种核心机制(T细胞功能障碍和排除),为临床决策提供精准预测。文章涵盖数据准备、标准化流程、网页工具操作指南及结果解读,帮助科研人员和临床医生避开常见误区,优化免疫治疗策略。

weixin_29309475的博客 196

Android学习-RecyclerView实现横向滚动瀑布流布局

ListView扩展性不好,只能实现纵向滚动的效果。 这里偷下懒,我们直接粘贴一下书上的代码。为了加深记忆,理解部分我敲出来。 RecyclerView属于新增的空间,被定义在了support库中,因此,想要使用该控件,需要在项目的build.gradle中添加相应的依赖库才行。 添加完之后要点击一下Sync Now来进行同步。然后修改布局中的代码 接下来要为RecyclerView准备一个适配器,新建FruitAdapter类,让这个适配器继承自RecyclerView.Adapter,并将泛型指定为

vbbbbbbbbbbb的博客 1224

MQTT在智能家居中的实战:用Android手机控制ESP8266设备(基于EMQX)

本文详细介绍了如何利用MQTT协议构建一个完整的智能家居控制系统,通过Android手机App远程操控ESP8266设备。文章提供了从EMQX服务器部署、ESP8266端Arduino固件开发到Android客户端搭建的完整实战指南,并深入探讨了系统联调、稳定性优化与安全加固等关键环节,为物联网开发者提供了一套可复用的解决方案。

ujm567890的博客 457

recyclerview简单实现横向滑动

网格布局 GridLayoutManager manager = new GridLayoutManager(getActivity(),5);//数字为行数或列数 manager.setAutoMeasureEnabled(true); manager.setOrientation(LinearLayoutManager.HORIZONTAL);//设置为横向滑动 recyclerView.setLayoutManager(manager); 线性布局1 LinearLayoutManager

qq_45371893的博客 4925

Serial RapidIO Gen2 IP 说明(三)

前言 继续接着上篇文章,介绍Serial RapidIO Gen2 IP 的具体端口信息。 一、端口描述 1、缓冲设计接口 2、物理层接口 参考说明 【1】Serial RapidIO Gen2 v4.1https://china.xilinx.com/content/dam/xilinx/support/documentation/ip_documentation/srio_gen2/v4_1/pg007_srio_gen2.pdf ...

记录所学,分享知识,结识挚友 1319

【2026OD新机考】【不定滑窗】20260415-API请求日志去重分析【Py/Java/C++/C/JS/Go六种语言OD真题】【欧弟算法】全网注释最详细分类最全的华子OD真题题解

中找到所有的连续的相同元素,同时统计对应的连续相同元素对应的值的平均值。:当右指针为第一个元素(没有前一个元素),或者右指针对应的元素。某微服务系统的日志监控平台需分析API调用记录,日志含大量。相等,说明当前元素仍然属于同一个相同元素窗口,将当前元素值。中的所有元素均相等,并且计算窗口和情况即可。请实现一个函数,对给定的日志数据去重合并处理。位置,表示开启一个新的窗口,此时需要重置窗口和。,为了优化重复的请求记录,存储和后续分析需对。:对应的响应时间数组(毫秒)。重新置为当前右指针的元素值。

weixin_48157259的博客 111

RecyclerView 实现横向滚动效果

版权声明:本文为博主原创文章,未经博主允许不得转载。 我相信很久以前,大家在谈横向图片轮播是时候,优先会选择具有HorizontalScrollView效果和ViewPager来做,不过自从Google大会之后,系统为我们提供了另一个控件RecyclerView。RecyclerView是listview之后的又一利器,它可以实现高度的定制。今天就利用RecyclerView实现我们需要的相

阳光灿烂的日子的博客 7837

手把手教您同花顺如何设置大盘分时均价线

本文将手把手教你如何在同花顺PC端开启大盘指数分时图📈

XiaoqiangClub的博客 4383

【Android】RecyclerView一个更加强大好用的控件,实现横向滚动和瀑布流布局,网格布局滚动

先介绍了LayoutInflater,View,Context的关系、RecyclerView的基本用法(制作一个适配器)、实现横向滚动和瀑布流布局、网格布局、RecycleView点击事件

摸鱼小小虫的博客 1615

深入剖析 Wenet 下 AISHELL-1 的 run.sh 脚本:从数据准备到模型训练

run.sh脚本用于处理 AISHELL-1 数据集的整个训练和测试流程。我们将逐步分析脚本中的每个部分,包括环境变量、参数设置、各个阶段的执行等。stage: 设置脚本的起始阶段(如数据准备)。stop_stage: 设置脚本的结束阶段。通过对 Wenet 下 AISHELL-1 的run.sh脚本的详细剖析,我们希望你能更好地理解每个步骤的功能及其背后的原理。此脚本不仅为模型训练提供了便利,也为用户自定义和扩展训练流程提供了基础。希望本教程能帮助你顺利完成语音识别项目!

帅小柏的博客 1632

ADC的有效位数(ENOB)、信噪比(SNR)和无杂散动态范围(SFDR)——详细分析

设计提示(从文本):选择ADC时,看数据手册的SNR、ENOB、SFDR vs 频率图。减小抖动:用低抖动时钟、优化PCB、电源滤波。对于大信号:关注SFDR(失真);小信号:关注SNR/ENOB(噪声)。如果ENOB不足,用过采样或多ADC并行提升(但增加复杂度)。为什么这段重要?它解释了为什么高速ADC(如用于5G、雷达)的规格那么贵:抖动和失真限制了高频性能。理解这些,能帮你避免设计陷阱。

VectorShift的博客 1402

Android recycleView或者viewpage横向或者垂直滑动(抖音上下滑动)

直播和短视频常见的播放预览的交互存在滑动,常见的滑动有左右或者上下。只要在PagerSnapHelper的attachToRecyclerView方法中,将recycleview加进去就行了。setOrientation():是控制的,受原来的recycleview的控制一样。如今单内容在呈现的时候,很容易占取一屏,最常见是当下比较流行的模块:直播和短视频。PagerSnapHelper:是recycleview的提供的包,可以直接引用。list.add("这是第:"+index+"页");......

3151

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

RecyclerView的基本用法、横向/纵向/网格/瀑布流布局显示及点击事件

ListView只能纵向显示而且还要优化(即手动写代码实现缓存好子项布局文件及其里面控件),而Recycler除了优化好这些,还可以实现横向/纵向/网格/瀑布流布局显示(关键:只需改RecyclerVIew.setLayoutManager(布局类对象实例)中的布局类对象,这个参数的布局不同,就可以实现不同子项显示方式:横向/纵向/网格/瀑布流布局 纵向LinearLayoutManager.V...

LJW874362735的博客 4320

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

RecyclerView 横向滑动

LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this); linearLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);

weixin_44285813的博客 2105

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

android 开发 RecyclerView 横排列列表布局

1.写一个一竖的自定义布局: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="wrap_content" android:layout_height="wrap_content"&gt

weixin_42602900的博客 1834

Android RecyclerView实现横向网格翻页功能

Android RecyclerView实现横向网格翻页功能 效果: 最近新入职一家公司做项目优化,发现一个功能列表(类似于手机桌面)使用ViewPager+Fragment+RecyclerView嵌套实现 嵌套的太多,看的我浑身难受 话不多说直接上代码。 首先定义一个翻页的Helper public class PagingScrollHelper { RecyclerView mRecyclerView = null; private MyOnScrollList

yuton9的博客 4223

RecyclerView 横向滚动

RecyclerView 横向滚动

xie__jin__cheng的博客 928

Android RecyclerView(二)实现横向滚动和瀑布流布局

项目完整代码 https://github.com/Phil-tom/Android-The-First-Line-of-Code/tree/main/Chapter3/RecyclerViewTest RecyclerView实现横向滚动 ListView做不到横向滚动,RecyclerView可以。 fruit_item.xml需要修改,在之前纵向滚动的时候,该布局里面的元素是水平排列的。如果实现横向滚动的话,该布局里面的元素应该纵向排列。 <?xml version="1.0" encoding

guliguliguliguli的博客 1339

RecyclerView自定义LayoutManager实现横向瀑布流

最近由于公司项目需要,做了一个横向瀑布流的组件,如下图;这个组件是通过自定义LayoutManager实现,LayoutManager为我们提供了强大的自定义功能,但是实现过程却不简单,捣鼓了两天,也就算基本可以用了;Demo源码在最下面,这里主要记录一些自定义LayoutManager过程中需要注意的细节和关键点; (这个Demo以及下面的记录参考文章:http://blog.youkuaiyun.com

super_spy的专栏 6643

Android RecyclerView 实现横向滚动效果

滚动控件的实现方式有很多, 使用RecyclerView也比较简单. 做了一个简单的年龄滚动控件, 让我们来看看RecyclerView的使用方式, 主要有以下几点: (1) 对齐控件中心位置. (2) 计算滚动距离. (3) 高亮中心视图. (4) 实时显示中心数据. (5) 停止时自动对齐. (6) 滚动时, 设置按钮状态开关 1.RecyclerVi

shenggaofei的博客 1万+

ImageView控件的基本使用(点击Button按钮,切换图片显示)

ImageView是用于在界面上展示图片的一个控件,它可以让我们的程序界面变得更加丰富多彩。学习这个控件需要提前准备好一些图片,图片通常都是放在drawable开头的目录下的。这里我们为了让程序的图片显示更加精美,我们可以使用矢量图来作为资源图片。这里我就不具体讲解如何将.svg矢量图在AndroidStudio中变成.xml适量图了。网上很多教程。 程序效果图:   activit...

Android_小牧的博客 1万+
上一篇: RecyclerView控件的基本使用(增强版的ListView)
下一篇: 编写精美的聊天界面(左边显示接收消息,右边显示发送消息)(项目已上传GitHub)
Android_牧
博客等级 码龄9年 88粉丝 45原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值