栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Android初学二之仿微信APP实现RecyclerView控件的设计开发,实现点击事件及图片瀑布流

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Android初学二之仿微信APP实现RecyclerView控件的设计开发,实现点击事件及图片瀑布流

目录
  • 0 实验环境
  • 1 界面展示
  • 2 功能说明
  • 3 核心代码
    • 3.1 实现RecyclerView控件的设计开发
    • 3.2 添加了文字库assets
    • 3.3 实现点击事件对item中的每个LinearLayout实现点击显示内容
    • 3.4 实现顶部悬浮(吸顶),对每个LinearLayout进行分组,且在上下滑动时分组名在顶部悬浮显示
    • 3.5 实现瀑布流,菜单朋友圈实现图片的展示,展现瀑布流的效果
  • 4 代码仓库
  • 5 总结

0 实验环境

在Android Studio中进行有关代码的编写和界面效果展示


1 界面展示


2 功能说明

(1)在上次微信界面设计的基础上,选择一个Fragment文件实现RecyclerView控件的设计开发;
(2)我选择在“联系人”界面进行RecyclerView的纵向布局设计并用分割线将内容分开;
(3)在Android Studio中添加了文字库assets,可以将TextView文本框中的文本设置自己想要的字体;
(4)实现点击事件,对item中的每个LinearLayout实现点击显示内容;
(5)实现顶部悬浮(吸顶),对每个LinearLayout进行分组,且在上下滑动时分组名在顶部悬浮显示;
(6)实现瀑布流,菜单朋友圈实现图片的展示,展现瀑布流的效果


3 核心代码 3.1 实现RecyclerView控件的设计开发

核心代码:
Fragment_contacts.xml文件的改写:
(删除了上次的TextView文本框的简单内容展示,添加了RecyclerView组件)




    



item.xml的列表元素的内容:
(对列表中元素的具体内容和格式进行设计)




    

    

    


Adapter适配器的编写:
(Adapter负责从数据源取得数据并告诉列表如何显示)

public class RecyclerViewAdapter extends RecyclerView.Adapter {
    //昵称列表
    private List mList;
    //个性签名列表
    private List nList;

    private Context context;

    //带参构造函数
    public RecyclerViewAdapter(List mList, List nList, Context context) {
        //昵称列表
        this.mList = mList;
        //个性签名列表
        this.nList = nList;

        this.context = context;
    }

    @NonNull
    @Override
    public Myviewholder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = (View) LayoutInflater.from(parent.getContext()).inflate(R.layout.item, parent, false);
        Myviewholder myviewholder = new Myviewholder((view));
        return myviewholder;
    }

    @Override
    public void onBindViewHolder(@NonNull Myviewholder holder, int position) {
        holder.counter.setText(position + 1 + " ");
        holder.nickname.setText(mList.get(position));
        holder.personalized_signature.setText(nList.get(position));
    }

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

    public class Myviewholder extends RecyclerView.ViewHolder {
        TextView counter, nickname, personalized_signature;

        public Myviewholder(@NonNull View itemView) {
            super(itemView);
            counter = itemView.findViewById((R.id.counter));
            nickname = itemView.findViewById(R.id.nickname);
            personalized_signature = itemView.findViewById(R.id.personalized_signature);

        }
    }
}

Fragment_contacts.java文件的改写:
(实现适配器对象的创建、使用及列表数据的添加,数据的添加在此省略)
public class Fragment_contacts extends Fragment {
    private Context context;
    //昵称列表
    private List mList = new ArrayList<>();
    //个性签名列表
    private List nList = new ArrayList<>();

    public Fragment_contacts() {
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_contacts, container, false);

        context = view.getContext();

        InitNickNameList();
        InitSignatureList();

        RecyclerView recyclerView = view.findViewById(R.id.recyclerview_contacts);
        RecyclerViewAdapter adapter = new RecyclerViewAdapter(mList, nList, context);
        recyclerView.setAdapter(adapter);

        LinearLayoutManager manager = new LinearLayoutManager(context);
        manager.setOrientation(LinearLayoutManager.VERTICAL);
        recyclerView.setLayoutManager(manager);
        recyclerView.addItemDecoration(new DividerItemDecoration(context, LinearLayoutManager.VERTICAL));

        return view;
    }
3.2 添加了文字库assets

在TextView对象或样式中使用字体,可以是单个字体文件,也可以是字体系列中的字体,还可以将TextView文本框中的文本设置自己想要的字体!
要为其设置字体TextView,执行以下操作之一:
在布局XML文件中,将fontFamily属性设置为要访问的字体文件。
即在TextView组件中添加字体属性,如下:

android:fontFamily="@font/huawencaiyun"


打开“ 属性”窗口以设置其字体 TextView。
注意:“属性”窗口仅在设计编辑器打开时可用,选择窗口底部的“ 设计”选项卡,从fontFamily列表中选择字体。

如果要添加自己下载的字体文件,只需将其粘贴到左侧的res/font目录中,注意文件名称需修改为小写英文字母命名**(若在AS里无法操作,只需将AS关闭,到其项目文件夹内直接粘贴并重命名)。**

同时系统字体文件夹(C:WindowsFonts)内自带了许多字体,可以自行挑选复制!
修改字体后的效果:

3.3 实现点击事件对item中的每个LinearLayout实现点击显示内容

RecyclerView的点击事件有两种写法:
(1)在Adapter里面直接对控件做点击事件;
(2)写接口,在Activity或Fragment上实现接口中定义的方法。
下面,我将采用第一种方法:
在Adapter的函数onBindViewHolder()中添加点击事件代码

final String content = mList.get(position);
        holder.itemView.setContentDescription(content);
        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(context, "您点击的联系人是:" + content, Toast.LENGTH_SHORT).show();
            }
        });

3.4 实现顶部悬浮(吸顶),对每个LinearLayout进行分组,且在上下滑动时分组名在顶部悬浮显示

由于前期未对数据进行组别属性的定义,后期在对数据进行重构(重新定义一个类,用于存放数据本身及其分组信息等)时复杂度较高(需修改大量代码),故并未实现此功能。

3.5 实现瀑布流,菜单朋友圈实现图片的展示,展现瀑布流的效果

也需新建item.xml和修改朋友圈菜单对应的fragment.xml、fragment.java,还需添加一个Adapter.java实现从数据源取得数据并告诉列表如何显示。
StaggeredGridAdapter.java文件:

public class StaggeredGridAdapter extends RecyclerView.Adapter{
    private Context mContext;
    private RecyclerView recyclerView;
    private List mList;
    private List mHeight;

    //带参构造函数
    public StaggeredGridAdapter(Context mContext, List mList) {
        this.mContext = mContext;
        this.mList = mList;
    }

    
    public List initHeight(){
        mHeight = new ArrayList<>();
        for (int i=0;i 

Fragment_circle_friend.java文件实现图片瀑布流显示:

 @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_circle_friend, container, false);

        context = view.getContext();

        //添加数据
        InitImageList();

        //创建Adapter对象
        RecyclerView recyclerView = view.findViewById(R.id.recyclerview_circle_friend);
        StaggeredGridAdapter adapter = new StaggeredGridAdapter(context, mList);
        recyclerView.setAdapter(adapter);

        recyclerView.setLayoutManager(new StaggeredGridLayoutManager(3, StaggeredGridLayoutManager.VERTICAL));
        return view;
    }

4 代码仓库

具体代码已上传至gitee代码仓库


5 总结

在上次微信界面设计的基础上
主要实现了如下功能:
(1)选择一个Fragment文件实现RecyclerView控件的设计开发;
(2)我选择在“联系人”界面进行RecyclerView的纵向布局设计并用分割线将内容分开;
(3)在Android Studio中添加了文字库assets,可以将TextView文本框中的文本设置自己想要的字体;
(4)实现点击事件,对item中的每个LinearLayout实现点击显示内容;
(5)实现顶部悬浮(吸顶),对每个LinearLayout进行分组,且在上下滑动时分组名在顶部悬浮显示;
(6)实现瀑布流,菜单朋友圈实现图片的展示,展现瀑布流的效果,且点击图片时会显示发表该图片的好友名称。

由于前期未对数据进行组别属性的定义,后期在对数据进行重构(重新定义一个类,用于存放数据本身及其分组信息等)时复杂度较高(需修改大量代码),故并未实现此功能。


(注:第13次发文,如有错误和疑问,欢迎在评论区指出!)
——2021.10.16

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/327452.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号