一对一直播系统源码,Flexbox+ReclyclerView实现流式布局
一对一直播系统源码,Flexbox+ReclyclerView实现流式布局实现的相关代码
布局
activity_main.xml
1 | <?xml version= "1.0" encoding= "utf-8" ?><br><LinearLayout xmlns:android= "http://schemas.android.com/apk/res/android" <br> android:layout_width= "match_parent" <br> android:layout_height= "match_parent" ><br> <androidx.recyclerview.widget.RecyclerView<br> android:id= "@+id/rv_Flexbox" <br> android:layout_width= "match_parent" <br> android:layout_height= "match_parent" /><br></LinearLayout> |
MainActivity
1 | package com.example.myapplication;<br> import androidx.appcompat.app.AppCompatActivity;<br> import androidx.recyclerview.widget.RecyclerView;<br> import android.os.Bundle;<br> import android.util.Log;<br> import android.view.View;<br> import com.google.android.flexbox.FlexDirection;<br> import com.google.android.flexbox.FlexWrap;<br> import com.google.android.flexbox.FlexboxLayoutManager;<br> import com.google.android.flexbox.JustifyContent;<br> import java.util.ArrayList;<br> import java.util.List;<br> public class MainActivity extends AppCompatActivity {<br> private RecyclerView rv_Flexbox;<br> private List<String> list_data;<br> private FlexBoxAdapter fAdapter;<br> @Override <br> protected void onCreate(Bundle savedInstanceState) {<br> super .onCreate(savedInstanceState);<br> setContentView(R.layout.activity_main);<br> rv_Flexbox = (RecyclerView)findViewById(R.id.rv_Flexbox);<br> FlexboxLayoutManager flexboxLayoutManager = new FlexboxLayoutManager( this );<br> //flexDirection 属性决定主轴的方向(即项目的排列方向)。类似 LinearLayout 的 vertical 和 horizontal。<br> flexboxLayoutManager.setFlexDirection(FlexDirection.ROW);//主轴为水平方向,起点在左端。<br> //flexWrap 默认情况下 Flex 跟 LinearLayout 一样,都是不带换行排列的,但是flexWrap属性可以支持换行排列。<br>// flexboxLayoutManager.setFlexWrap(FlexWrap.WRAP);//按正常方向换行<br> //justifyContent 属性定义了项目在主轴上的对齐方式。<br>// flexboxLayoutManager.setJustifyContent(JustifyContent.FLEX_START);//交叉轴的起点对齐。<br> rv_Flexbox.setLayoutManager(flexboxLayoutManager);<br> list_data = new ArrayList<>();<br> list_data.add("小米手机");<br> list_data.add("平衡車");<br> list_data.add("无人机");<br> list_data.add("神舟笔记本电脑");<br> list_data.add("小鹏汽车");<br> list_data.add("特斯拉");<br> fAdapter = new FlexBoxAdapter(this,list_data);<br>// fAdapter.notifyDataSetChanged();<br> rv_Flexbox.setAdapter(fAdapter);<br> fAdapter.setOnItemClickLitener(new FlexBoxAdapter.OnItemClickLitener() {<br> @Override<br> public void OnItemClick(View view, int positon) {<br> Log.e("wy", "position: "+positon+" data:" + list_data.get(positon));<br> }<br> });<br> }<br>} |
FlexBoxAdapter
1 | package com.example.myapplication;<br> import android.content.Context;<br> import android.view.LayoutInflater;<br> import android.view.View;<br> import android.view.ViewGroup;<br> import android.widget.TextView;<br> import androidx.annotation.NonNull;<br> import androidx.recyclerview.widget.RecyclerView;<br> import java.util.List;<br> public class FlexBoxAdapter extends RecyclerView.Adapter<FlexBoxAdapter.myHolder> {<br> private Context mContext;<br> private List<String> list_data;<br> private LayoutInflater inflater;<br> public FlexBoxAdapter(Context mContext, List<String> list_data) {<br> this .mContext = mContext;<br> this .list_data = list_data;<br> this .inflater = LayoutInflater.from(mContext);<br> }<br> @NonNull <br> @Override <br> public myHolder onCreateViewHolder( @NonNull ViewGroup viewGroup, int i) {<br> View view = inflater.inflate(R.layout.fragment_rv_item,viewGroup, false );<br> return new myHolder(view);<br> }<br> @Override <br> public void onBindViewHolder( @NonNull final myHolder myHolder, int i) {<br> myHolder.tv_title.setText(list_data.get(i));<br> // 如果设置了回调,则设置点击事件<br> if (mOnItemClickLitener != null)<br> {<br> myHolder.itemView.setOnClickListener(new View.OnClickListener()<br> {<br> @Override<br> public void onClick(View v)<br> {<br> int pos = myHolder.getLayoutPosition();<br> mOnItemClickLitener.OnItemClick(myHolder.itemView, pos);<br> }<br> });<br> }<br> }<br> @Override<br> public int getItemCount() {<br> return list_data.size();<br> }<br> class myHolder extends RecyclerView.ViewHolder<br> {<br> TextView tv_title;<br> public myHolder(@NonNull View itemView) {<br> super(itemView);<br> tv_title = (TextView)itemView.findViewById(R.id.tv_title);<br> }<br> }<br> /**<br> * 定义点击每项的接口<br> */<br> public interface OnItemClickLitener<br> {<br> void OnItemClick(View view, int positon);<br> }<br> private OnItemClickLitener mOnItemClickLitener;<br> public void setOnItemClickLitener(OnItemClickLitener mOnItemClickLitener)<br> {<br> this.mOnItemClickLitener = mOnItemClickLitener;<br> }<br>} |
drawable下
flex_item_bg.xml
1 | <?xml version= "1.0" encoding= "utf-8" ?><br><shape xmlns:android= "http://schemas.android.com/apk/res/android" android:shape= "rectangle" ><br> <!-- 填充--><br> <solid android:color= "#00000000" /><br> <!-- 描边 --><br> <stroke<br> android:width= "1dp" <br> android:color= "#7F7F7F" /><br> <!-- 圆角 --><br> <corners<br> android:radius= "2dp" /><br></shape> |
以上就是 一对一直播系统源码,Flexbox+ReclyclerView实现流式布局实现的相关代码,更多内容欢迎关注之后的文章
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现