使用海康威视sdk进行推流,实现实时预览,回放等功能。

环境准备
开发工具:eclipse
Jdk版本:jdk1.8
开发语言:java,界面使用swing开发
摄像头:DS-2CD1221D-I3
海康威视SDK下载地址:海康威视开放平台
SDK版本:CH-HCNetSDKV6.0.2.35_build20190411_Win64
EasyRTMPLive:EasyRTMPLive

文件:url80.ctfile.com/f/25127180-739355281-240bc2?p=551685 (访问密码: 551685)


Android ViewPager2 + Fragment + BottomNavigationView 联动
本篇主要介绍一下 ViewPager2 + Fragment + BottomNavigationView , 上篇中把ViewPager2和Fragment 联动起来了, 本篇主要把 BottomNavigationView集成进去

2022-11-25 17.31.02

概述
BottomNavigationView 是一个底部导航控件, 现在要实现的效果就是 滑动ViewPager2 中的Fragment 并且底部BottomNavigationView 菜单部分跟着联动 同理反过来 点击BottomNavigationView 的时候 ViewPager2中的Fragment 也对应滑动, 下面来看看如何实现的吧

实现思路
1.Activity 布局文件中引入 ViewPager2 控件
2.编写menu文件 提供给BottomNavigationView 用于展示
3.Activity 布局文件中引入BottomNavigationView 控件
4.编写 Fragment 用于填充到ViewPager2中
5.编写Adapter 实现 FragmentStateAdapter
6.BottomNavigationView添加 setOnItemSelectedListener 联动ViewPager2
7.ViewPager2 添加 registerOnPageChangeCallback 联动 BottomNavigationView
代码实现
下面就来按照上面的思路一步步实现代码啦!

1.Activity 布局文件中引入 ViewPager2 控件

<?xml version="1.0" encoding="utf-8"?>

<androidx.constraintlayout.widget.ConstraintLayout 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=“.ViewPager2BottomActivity”>

<androidx.viewpager2.widget.ViewPager2android:id="@+id/viewpager2bottom"android:layout_width="match_parent"android:layout_height="0dp"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent"app:layout_constraintBottom_toTopOf="@id/bootomnav2"/>

</androidx.constraintlayout.widget.ConstraintLayout>
2.编写menu文件 提供给BottomNavigationView 用于展示
图标icon 自己配置吧

<?xml version="1.0" encoding="utf-8"?>

<itemandroid:title="首页"android:id="@+id/home_item"android:icon="@drawable/ic_baseline_home_24"/><itemandroid:title="类型"android:id="@+id/type_item"android:icon="@drawable/ic_baseline_merge_type_24"/><itemandroid:title="添加"android:id="@+id/add_item"android:icon="@drawable/ic_baseline_add_24"/><itemandroid:title="设置"android:id="@+id/setting_item"android:icon="@drawable/ic_baseline_settings_24"/>

3.Activity 布局文件中引入BottomNavigationView 控件 package com.johnny.slzzing;

import android.os.Bundle;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;

import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import org.w3c.dom.Text;

/**

  • A simple {@link Fragment} subclass.

  • Use the {@link Bottom2Fragment#newInstance} factory method to

  • create an instance of this fragment.
    */
    public class Bottom2Fragment extends Fragment {

    // TODO: Rename parameter arguments, choose names that match
    // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
    private static final String ARG_PARAM1 = “param1”;
    private static final String ARG_PARAM2 = “param2”;

    // TODO: Rename and change types of parameters
    private String mParam1;
    private String mParam2;

    public Bottom2Fragment() {
    // Required empty public constructor
    }

    /**

    • Use this factory method to create a new instance of
    • this fragment using the provided parameters.
    • @param param1 Parameter 1.
    • @param param2 Parameter 2.
    • @return A new instance of fragment Bottom2Fragment.
      */
      // TODO: Rename and change types and number of parameters
      public static Bottom2Fragment newInstance(String param1, String param2) {
      Bottom2Fragment fragment = new Bottom2Fragment();
      Bundle args = new Bundle();
      args.putString(ARG_PARAM1, param1);
      args.putString(ARG_PARAM2, param2);
      fragment.setArguments(args);
      return fragment;
      }

    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (getArguments() != null) {
    mParam1 = getArguments().getString(ARG_PARAM1);
    mParam2 = getArguments().getString(ARG_PARAM2);
    }
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
    Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    return inflater.inflate(R.layout.fragment_bottom2, container, false);
    }

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    TextView textView = view.findViewById(R.id.textview2);
    //把动态传入的参数设置到 textView上
    textView.setText(mParam1);
    }
    }
    fragment_bottom2.xml

<?xml version="1.0" encoding="utf-8"?>

<androidx.constraintlayout.widget.ConstraintLayout 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=“.ViewPager2BottomActivity”>

<androidx.viewpager2.widget.ViewPager2android:id="@+id/viewpager2bottom"android:layout_width="match_parent"android:layout_height="0dp"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent"app:layout_constraintBottom_toTopOf="@id/bootomnav2"/><com.google.android.material.bottomnavigation.BottomNavigationViewandroid:id="@+id/bootomnav2"android:layout_width="match_parent"android:layout_height="wrap_content"app:layout_constraintTop_toBottomOf="@id/viewpager2bottom"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintStart_toStartOf="parent"app:menu="@menu/bottom_item_menu"                                        app:labelVisibilityMode="labeled" />

</androidx.constraintlayout.widget.ConstraintLayout>
4.编写 Fragment 用于填充到ViewPager2中

<?xml version="1.0" encoding="utf-8"?>

<androidx.constraintlayout.widget.ConstraintLayout xmlns:android=“http://schemas.android.com/apk/res/android”
xmlns:tools=“http://schemas.android.com/tools”
android:layout_width=“match_parent”
android:layout_height=“match_parent”
xmlns:app=“http://schemas.android.com/apk/res-auto”
tools:context=“.Bottom2Fragment”>

<!-- TODO: Update blank fragment layout -->
<TextViewandroid:id="@+id/textview2"android:layout_width="match_parent"android:layout_height="match_parent"android:text="@string/hello_blank_fragment"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent"android:gravity="center"android:textSize="25sp"android:textStyle="bold"android:textColor="@color/black"/>

</androidx.constraintlayout.widget.ConstraintLayout>
5.编写Adapter 实现 FragmentStateAdapter
上篇已经说过了 直接继承 FragmentStateAdapter

class MyViewPager2BottomAdapter extends FragmentStateAdapter {

List<Fragment> fragmentList;
public MyViewPager2BottomAdapter(@NonNull FragmentActivity fragmentActivity, List<Fragment> list) {super(fragmentActivity);this.fragmentList = list;
}@NonNull
@Override
public Fragment createFragment(int position) {return fragmentList.get(position);
}@Override
public int getItemCount() {return fragmentList.size();
}

}
6.BottomNavigationView添加 setOnItemSelectedListener 联动ViewPager2
bottomNavigationView.setOnItemSelectedListener核心方法

Acitivity 中实现如下代码:

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_view_pager2_bottom);

    viewPager2 = findViewById(R.id.viewpager2bottom);bottomNavigationView = findViewById(R.id.bootomnav2);MyViewPager2BottomAdapter myViewPager2BottomAdapter =new MyViewPager2BottomAdapter(this,initFragmentList());viewPager2.setAdapter(myViewPager2BottomAdapter);//重点 设置 bottomNavigationView 的item 的点击事件 设置viewPager2的联动bottomNavigationView.setOnItemSelectedListener(new NavigationBarView.OnItemSelectedListener() {@Overridepublic boolean onNavigationItemSelected(@NonNull MenuItem item) {int itemId = item.getItemId();switch (itemId){case R.id.home_item:viewPager2.setCurrentItem(0);break;case R.id.type_item:viewPager2.setCurrentItem(1);break;case R.id.add_item:viewPager2.setCurrentItem(2);break;case R.id.setting_item:viewPager2.setCurrentItem(3);break;}return true;}});}

7.ViewPager2 添加 registerOnPageChangeCallback 联动 BottomNavigationView
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_view_pager2_bottom);

viewPager2 = findViewById(R.id.viewpager2bottom);
bottomNavigationView = findViewById(R.id.bootomnav2);
MyViewPager2BottomAdapter myViewPager2BottomAdapter =new MyViewPager2BottomAdapter(this,initFragmentList());
viewPager2.setAdapter(myViewPager2BottomAdapter);bottomNavigationView.setOnItemSelectedListener(new NavigationBarView.OnItemSelectedListener() {@Overridepublic boolean onNavigationItemSelected(@NonNull MenuItem item) {int itemId = item.getItemId();switch (itemId){case R.id.home_item:viewPager2.setCurrentItem(0);break;case R.id.type_item:viewPager2.setCurrentItem(1);break;case R.id.add_item:viewPager2.setCurrentItem(2);break;case R.id.setting_item:viewPager2.setCurrentItem(3);break;}return true;}
});//重点 实现滑动的时候 联动 bottomNavigationView的selectedItem
viewPager2.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {@Overridepublic void onPageSelected(int position) {super.onPageSelected(position);switch (position){case 0:bottomNavigationView.setSelectedItemId(R.id.home_item);break;case 1:bottomNavigationView.setSelectedItemId(R.id.type_item);break;case 2:bottomNavigationView.setSelectedItemId(R.id.add_item);break;case 3:bottomNavigationView.setSelectedItemId(R.id.setting_item);break;}}
});

}
image-20221125172800393

总结
本篇主要介绍了 如何把ViewPager2 + Fragment + BottomNavigationView 集成起来并且实现ViewPager2和BottomNavigationView的双向联动

海康威视Sdk java推流相关推荐

  1. 五、JAVA调用海康威视SDK实现摄像头内网转外网并前端展示

    接上一章:四.JAVA调用海康威视SDK实现摄像头内网推流到阿里云 本章实现摄像头内网推流到阿里云服务器并再浏览器WEB前端展示. 环境准备 开发工具:eclipse Jdk版本:jdk1.8 开发语 ...

  2. java对接海康威视SDK(win64、linux64),处理播放实时流转码,按时间回放功能,附海康威视最新3.0摄像头监控web端实例+插件

    java对接海康威视SDK(win64.linux64),处理播放实时流转码,按时间回放功能 准备工作 遇到的坑 调用步骤 参数配置 DeviceEnums 初始化sdk 注册 大华的sdk叫登陆海康 ...

  3. java对接海康威视SDk实现红外DL/T抓图

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.要获取的图片样式 二.实现步骤 1.导入海康威视的SDK 2.文件导入 3.代码实现 (1) main方法 (2) ...

  4. 海康威视运行Java SDK

    海康威视运行Java SDK 1. SDK下载 2. 安装海康威视设备 3. 导入项目 4. 放入dll文件 4.1 放入dll文件前项目 4.2 按官方说明文档,将dll放入 5. 运行 6. 解决 ...

  5. 二、JAVA调用海康威视SDK实现摄像头预览完整版

    接上一章:一.JAVA调用海康威视SDK实现摄像头预览 添加摄像头信息输入框 添加视频控制按钮 添加截图功能 代码: PreView.java package com.kx.hcws;import j ...

  6. 一、JAVA调用海康威视SDK实现摄像头预览

    环境准备 开发工具:eclipse Jdk版本:jdk1.8 开发语言:java,界面使用swing开发 摄像头: 海康威视SDK下载地址:下载地址 SDK版本:CH-HCNetSDKV6.0.2.3 ...

  7. 海康威视 sdk 报警订阅 java代码编写

    下面是一个示例代码,展示了如何使用海康威视 SDK 订阅报警: ``` import com.hikvision.artemis.sdk.ArtemisHttpUtil; import com.hik ...

  8. java对接 布防 海康威视_基于海康威视SDK javaB/S

    基于海康威视SDK javaB/S 下载NetVideoActiveX23.cab文件,放在webRoot下面的codebase文件夹里 //全局变量定义 var m_iNowChanNo = -1; ...

  9. 使用NetBeans 海康威视 SDK 二次开发

    环境: Windows 7 64 1.安装NetBeans IDE 8.2 https://netbeans.apache.org/download/index.html https://netbea ...

最新文章

  1. xhprof 使用笔记
  2. 悬而未决的AI竞赛:全球企业人工智能发展现状
  3. .NET福利集锦【持续整理中】
  4. HEAD detached from XXXX解决方法
  5. 44 | 套路篇:网络性能优化的几个思路(下)
  6. 序(不知道是什么时候的模拟题)
  7. 网易云深度学习第二课NoteBook2
  8. qt 程序异常结束_【心电国际指南2009专家解读】浦介麟 冉玉琴老师:QT 间期的规范化测量及其意义...
  9. Android初学第55天
  10. windows加域后的问题
  11. Windows Phone开发(1):概论
  12. TCL语言笔记:TCL过程控制练习
  13. Java 理论与实践: 您的小数点到哪里去了?
  14. mysql alter table 速度慢_mysql问题: alter导致速度慢 | 学步园
  15. 微信与企业微信消息如何互通?
  16. 360全景拼接 opencv_360度视频序列全景图拼接系统的设计与实现
  17. 如何获取股票交易接口
  18. 备份Ubuntu12.04 并制作成iso安装文件
  19. 「镁客·请讲」太平洋未来科技李建亿:深耕AR技术,布局垂直领域
  20. 成功,很简单!推荐5款网站,拒绝做行动上的矮子!狂甩拖延症!

热门文章

  1. 爬取东方财富网当日股票交易情况
  2. 向日葵控正在连接服务器,向日葵连接服务器失败
  3. 用Python实现微信自动化抢红包,再也不用担心抢不到红包了
  4. WORD粘贴图片+DEDE
  5. 基于nginx实现二维码下载安装app
  6. tarjan算法 (割点和桥)
  7. 支付宝人脸支付接入流程
  8. 《MATLAB在语音信号分析与合成中的应用》下载地址
  9. 儿童疫苗接种短信通知
  10. 人机交互——交互技术