底部导航栏的应用非常的广泛。今天就介绍直播视频app源码的其中一种实现方式。

一、Fragment + TextView 实现

前面一篇博客在介绍Fragment 的时候就使用了Fragment + ImageView 实现了一个直播视频app源码底部导航栏点击的例子,只要把ImageView 替换为TextView 是一样的实现。

这种方式每次点击我们都要重置 所有TextView的状态,然后选中点击的TextView

二、RadioGroup + ViewPager 实现

直播视频app源码只需重写RadioGroup的onCheckedChange,判断checkid即可知道点击的是哪个RadioButton,再给ViewPager 设置监听,让底部导航栏和viewpager同步就行了。

  1. 新建四个布局文件

这里我放一个布局文件的代码。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><ImageViewandroid:layout_width="match_parent"android:layout_height="500dp"android:src="@drawable/tx4"/><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="我的"android:textSize="50sp"android:textColor="#ff0000"android:layout_gravity="center" /></LinearLayout>
  1. 编写直播视频app源码更换底部导航栏图标的xml,和导入我们的图标,选中和没有选中个一个不同的颜色。这里就给出一个me_drawable.xml的例子

分别设置选中和没有选中的图片

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"><item android:state_checked="true" android:drawable="@drawable/me_select"/><item android:state_checked="false" android:drawable="@drawable/me_normal"/>
</selector>
  1. 编写activity_main.xml布局
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"tools:context="com.mq.bottomtoobar2.MainActivity"><androidx.viewpager.widget.ViewPagerandroid:id="@+id/viewpager"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_above="@+id/rg_tab"/><RadioGroupandroid:id="@+id/rg_tab"android:layout_width="fill_parent"android:layout_height="55dp"android:gravity="center_vertical"android:layout_alignParentBottom="true"android:orientation="horizontal"><RadioButtonandroid:id="@+id/rb_msg"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:button="@null"android:checked="true"android:drawableTop="@drawable/msg_drawable"android:gravity="center"android:paddingLeft="0dp"android:text="信息" /><RadioButtonandroid:id="@+id/rb_people"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:button="@null"android:drawableTop="@drawable/people_drawable"android:gravity="center"android:paddingLeft="0dp"android:text="联系人" /><RadioButtonandroid:id="@+id/rb_find"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:button="@null"android:drawableTop="@drawable/find_drawable"android:gravity="center"android:paddingLeft="0dp"android:text="发现" /><RadioButtonandroid:id="@+id/rb_me"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:button="@null"android:drawableTop="@drawable/me_drawable"android:gravity="center"android:paddingLeft="0dp"android:text="我" /></RadioGroup>
</RelativeLayout>

注意: android:button="@null" 属性可以将边上的圈圈去掉。

  1. 编写MainActivity代码
public class MainActivity extends AppCompatActivity {private ViewPager mViewPager;private RadioGroup mRadioGroup;private RadioButton tab1,tab2,tab3,tab4;  //四个单选按钮private List<View> mViews;   //存放视图@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initView();//初始化数据//对单选按钮进行监听,选中、未选中mRadioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {@Overridepublic void onCheckedChanged(RadioGroup radioGroup, int i) {switch (i) {case R.id.rb_msg:mViewPager.setCurrentItem(0);break;case R.id.rb_people:mViewPager.setCurrentItem(1);break;case R.id.rb_find:mViewPager.setCurrentItem(2);break;case R.id.rb_me:mViewPager.setCurrentItem(3);break;}}});}private void initView() {//初始化控件mViewPager=findViewById(R.id.viewpager);mRadioGroup=findViewById(R.id.rg_tab);tab1=findViewById(R.id.rb_msg);tab2=findViewById(R.id.rb_people);tab3=findViewById(R.id.rb_find);tab4=findViewById(R.id.rb_me);mViews=new ArrayList<View>();//加载,添加视图mViews.add(LayoutInflater.from(this).inflate(R.layout.msg,null));mViews.add(LayoutInflater.from(this).inflate(R.layout.people,null));mViews.add(LayoutInflater.from(this).inflate(R.layout.find,null));mViews.add(LayoutInflater.from(this).inflate(R.layout.me,null));mViewPager.setAdapter(new MyViewPagerAdapter());//设置一个适配器//对viewpager监听,让分页和底部图标保持一起滑动mViewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {@Overridepublic void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {}@Override   //让viewpager滑动的时候,下面的图标跟着变动public void onPageSelected(int position) {switch (position) {case 0:tab1.setChecked(true);tab2.setChecked(false);tab3.setChecked(false);tab4.setChecked(false);break;case 1:tab1.setChecked(false);tab2.setChecked(true);tab3.setChecked(false);tab4.setChecked(false);break;case 2:tab1.setChecked(false);tab2.setChecked(false);tab3.setChecked(true);tab4.setChecked(false);break;case 3:tab1.setChecked(false);tab2.setChecked(false);tab3.setChecked(false);tab4.setChecked(true);break;}}@Overridepublic void onPageScrollStateChanged(int state) {}});}//ViewPager适配器private class MyViewPagerAdapter extends PagerAdapter {@Overridepublic int getCount() {return mViews.size();}@Overridepublic boolean isViewFromObject(@NonNull View view, @NonNull Object object) {return view==object;}@Overridepublic void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {container.removeView(mViews.get(position));}@NonNull@Overridepublic Object instantiateItem(@NonNull ViewGroup container, int position) {container.addView(mViews.get(position));return mViews.get(position);}}
}

这样,直播视频app源码就实现了一个底部导航栏。
声明:本文由云豹科技转发自浪漫主义码农博客,如有侵权请联系作者删除

实现直播视频app源码的底部导航栏相关推荐

  1. 仿抖音短视频APP源码,顶部导航栏切换详解

    仿抖音短视频APP源码,顶部导航栏切换详解的相关代码 class DaoHangNan extends StatefulWidget //继承StatefulWidget{TabController ...

  2. java修改动态视频,直播视频app源码,动态修改cron

    直播视频app源码,动态修改cron相关的代码 package com.chashiyu.task.dynamic; import org.springframework.beans.factory. ...

  3. 实现一个直播视频app源码的邀请码功能

    最近做一个直播视频app源码的邀请码功能,一直没找到感觉很完美的方法,然后自己造了一个轮子,当然效果还不是很完善. 首先我认为直播视频app源码的邀请码需要有以下特性: 1.唯一性,不能出现两个场景下 ...

  4. 直播视频app源码,Android 点击生成二维码

    直播视频app源码,Android 点击生成二维码实现的相关代码 activity.xml代码如下: <?xml version="1.0" encoding="u ...

  5. 直播视频app源码,自定义可点击可滑动的通用RatingBar

    直播视频app源码,自定义可点击可滑动的通用RatingBar实现的相关代码 绘制ratingbar 绘制未选中的背景 /*** 未选中Bitmap*/ private val starBgBitma ...

  6. 直播视频app源码的靓号可以怎样实现?

    一般开发直播视频app源码时,会预留一些号码给以后升级的会员使用,比如靓号,直播视频app源码采用正则表达式实现较好,通过规则引擎的后台页面做成实时可配置的也是不错的选择. 一. 一般会有如下的正则需 ...

  7. 仿抖音短视频APP源码,底部弹窗对话框

    仿抖音短视频APP源码,底部弹窗对话框的相关代码 核心代码 final Dialog dialog = new Dialog(this, R.style.BottomDialogStyle); Vie ...

  8. 直播视频app源码,保存图片到系统相册

    直播视频app源码,保存图片到系统相册相关的代码 public static void saveImageToGallery(Context context, Bitmap bmp) {// 首先保存 ...

  9. 直播视频app源码,高度不能充满全屏

    直播视频app源码,修改高度不能充满全屏相关的代码 <ScrollViewandroid:layout_width="match_parent"android:layout_ ...

最新文章

  1. 【Qt】启动QtCreator时报错:Cannot mix incompatible Qt library (version ) with this library (version...
  2. redis3.0.7_sds.c_sdsnewlen()
  3. django13:Session与Cookie操作
  4. html网页效果分析,熟手的html编写风格与原因分析_HTML/Xhtml_网页制作
  5. 博客园培训OOAD的课程概要
  6. mysql筛选两个表有相同项的数据库_用SQL查询两个表中相同的数据
  7. day048 BOM和DOM
  8. kettle创建mysql资源库时报错_kettle 创建数据库资源库
  9. NodeJs从零构建代理ip池(一)介绍
  10. 网络通讯技术在嵌入式系统中的应用
  11. 安卓系统组态软件_第六代组态软件夸平台支持苹果安卓手机APP智能控制PLC
  12. vs2017怎么安装python_vs2017怎么添加python
  13. wps 项目进度_wps excle做甘特图|如何利用excel自动生成施工进度计划横道图
  14. 冰河木马简易使用 ——病毒木马 003
  15. 阿里云盘tv版 v1.0.6电视版
  16. Ubuntu 安装微信
  17. 802.11n无线网卡驱动linux,Ubuntu 无线网卡驱动安装教程
  18. HTML5如何把圆分成六等分,CSS八等分圆的实现示例_CSS教程_CSS
  19. PerformanceTest
  20. win10 +ubuntu20.04双系统安装:双硬盘+nvidia独立显卡

热门文章

  1. APP应用测试要点。。。。我知道的就这么多
  2. winform 如何让 comboBox1 不能输入,只能下拉选择
  3. Scrapy爬取IT桔子死亡公司库及资本机构数据
  4. 关键链项目管理(二) 关键链
  5. 解决php加载慢的一个办法
  6. PHPStudy环境下phpmyadmin卡顿延迟不流畅解决办法
  7. NASA准备在2021年推出最大望远镜!哈佛用棉花糖机造“肉”?
  8. 171003 逆向-Reversing.kr(CSHOP)
  9. LDA+U中U值的计算方法
  10. 成人世界的人际交往中有哪些潜规则?