实现直播视频app源码的底部导航栏
底部导航栏的应用非常的广泛。今天就介绍直播视频app源码的其中一种实现方式。
一、Fragment + TextView 实现
前面一篇博客在介绍Fragment 的时候就使用了Fragment + ImageView 实现了一个直播视频app源码底部导航栏点击的例子,只要把ImageView 替换为TextView 是一样的实现。
这种方式每次点击我们都要重置 所有TextView的状态,然后选中点击的TextView
二、RadioGroup + ViewPager 实现
直播视频app源码只需重写RadioGroup的onCheckedChange,判断checkid即可知道点击的是哪个RadioButton,再给ViewPager 设置监听,让底部导航栏和viewpager同步就行了。
- 新建四个布局文件
这里我放一个布局文件的代码。
<?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>
- 编写直播视频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>
- 编写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" 属性可以将边上的圈圈去掉。
- 编写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源码的底部导航栏相关推荐
- 仿抖音短视频APP源码,顶部导航栏切换详解
仿抖音短视频APP源码,顶部导航栏切换详解的相关代码 class DaoHangNan extends StatefulWidget //继承StatefulWidget{TabController ...
- java修改动态视频,直播视频app源码,动态修改cron
直播视频app源码,动态修改cron相关的代码 package com.chashiyu.task.dynamic; import org.springframework.beans.factory. ...
- 实现一个直播视频app源码的邀请码功能
最近做一个直播视频app源码的邀请码功能,一直没找到感觉很完美的方法,然后自己造了一个轮子,当然效果还不是很完善. 首先我认为直播视频app源码的邀请码需要有以下特性: 1.唯一性,不能出现两个场景下 ...
- 直播视频app源码,Android 点击生成二维码
直播视频app源码,Android 点击生成二维码实现的相关代码 activity.xml代码如下: <?xml version="1.0" encoding="u ...
- 直播视频app源码,自定义可点击可滑动的通用RatingBar
直播视频app源码,自定义可点击可滑动的通用RatingBar实现的相关代码 绘制ratingbar 绘制未选中的背景 /*** 未选中Bitmap*/ private val starBgBitma ...
- 直播视频app源码的靓号可以怎样实现?
一般开发直播视频app源码时,会预留一些号码给以后升级的会员使用,比如靓号,直播视频app源码采用正则表达式实现较好,通过规则引擎的后台页面做成实时可配置的也是不错的选择. 一. 一般会有如下的正则需 ...
- 仿抖音短视频APP源码,底部弹窗对话框
仿抖音短视频APP源码,底部弹窗对话框的相关代码 核心代码 final Dialog dialog = new Dialog(this, R.style.BottomDialogStyle); Vie ...
- 直播视频app源码,保存图片到系统相册
直播视频app源码,保存图片到系统相册相关的代码 public static void saveImageToGallery(Context context, Bitmap bmp) {// 首先保存 ...
- 直播视频app源码,高度不能充满全屏
直播视频app源码,修改高度不能充满全屏相关的代码 <ScrollViewandroid:layout_width="match_parent"android:layout_ ...
最新文章
- 【Qt】启动QtCreator时报错:Cannot mix incompatible Qt library (version ) with this library (version...
- redis3.0.7_sds.c_sdsnewlen()
- django13:Session与Cookie操作
- html网页效果分析,熟手的html编写风格与原因分析_HTML/Xhtml_网页制作
- 博客园培训OOAD的课程概要
- mysql筛选两个表有相同项的数据库_用SQL查询两个表中相同的数据
- day048 BOM和DOM
- kettle创建mysql资源库时报错_kettle 创建数据库资源库
- NodeJs从零构建代理ip池(一)介绍
- 网络通讯技术在嵌入式系统中的应用
- 安卓系统组态软件_第六代组态软件夸平台支持苹果安卓手机APP智能控制PLC
- vs2017怎么安装python_vs2017怎么添加python
- wps 项目进度_wps excle做甘特图|如何利用excel自动生成施工进度计划横道图
- 冰河木马简易使用 ——病毒木马 003
- 阿里云盘tv版 v1.0.6电视版
- Ubuntu 安装微信
- 802.11n无线网卡驱动linux,Ubuntu 无线网卡驱动安装教程
- HTML5如何把圆分成六等分,CSS八等分圆的实现示例_CSS教程_CSS
- PerformanceTest
- win10 +ubuntu20.04双系统安装:双硬盘+nvidia独立显卡