Kotlin高仿微信-第28篇-朋友圈-预览图片、预览小视频
创始人
2024-03-06 21:52:56
0次

 Kotlin高仿微信-项目实践58篇详细讲解了各个功能点,包括:注册、登录、主页、单聊(文本、表情、语音、图片、小视频、视频通话、语音通话、红包、转账)、群聊、个人信息、朋友圈、支付服务、扫一扫、搜索好友、添加好友、开通VIP等众多功能。

Kotlin高仿微信-项目实践58篇,点击查看详情

效果图:

实现代码:

/*** Author : wangning* Email : maoning20080809@163.com* Date : 2022/5/24 16:11* Description : 朋友圈小视频播放*/
class SVideoPlayFragment : BaseDataBindingFragment(){override fun getLayoutRes() = R.layout.wc_svideo_playprivate var navController: NavController? = nullprivate var enterType: Int = 0private var isHideConfirm : Boolean = falseprivate var svideoView: SVideoView? = nulloverride fun onViewCreated(view: View, savedInstanceState: Bundle?) {super.onViewCreated(view, savedInstanceState)navController = findNavController()svideoView = svideo_play_view//2图片、3、小视频var type = arguments?.get(CommonUtils.Moments.TYPE_NAME) as Intvar filePath = arguments?.get(CommonUtils.Moments.TYPE_IMAGE_PATH).toString()//小视频路径var videoFilePath = arguments?.get(CommonUtils.Moments.TYPE_VIDEO_PATH).toString()//enterType = arguments?.get(CameraFragment.TYPE_ENTER)arguments?.let {it.get(CameraFragment.TYPE_ENTER)?.let {enterType = it as Int}it.get(CommonUtils.Chat.IS_HIDE_CONFIRM)?.let {isHideConfirm = it as Boolean}}if(type.equals(CommonUtils.Moments.TYPE_PICTURE)){super.builder().setTitleContent(R.string.me_moments_picture_preview)svideo_play_view.visibility = View.GONEphoto_preview_icon.visibility = View.VISIBLEvar degree = ImageUtils.getExifOrientation(filePath)TagUtils.d("图片角度:${degree} , 图片路径:${filePath}")if(degree == 0){GlideUtils.load(photo_preview_icon, filePath)} else {GlideUtils.loadRounded(photo_preview_icon, filePath, degree)}} else if(type.equals(CommonUtils.Moments.TYPE_VIDEO)){super.builder().setTitleContent(R.string.me_moments_video_preview)svideo_play_view.visibility = View.VISIBLEphoto_preview_icon.visibility = View.GONETagUtils.d("播放小视频文件:${videoFilePath}")svideo_play_view.initData(videoFilePath, true)}if(isHideConfirm){photo_preview_confirm.visibility = View.GONE}photo_preview_confirm.setOnClickListener {TagUtils.d("点击返回按钮:${enterType}")if(enterType == CameraFragment.TYPE_CHAT){var sVideoBean : SVideoBean? = nullif(type.equals(CommonUtils.Moments.TYPE_PICTURE)){//图片sVideoBean = SVideoBean(type, filePath)} else if(type.equals(CommonUtils.Moments.TYPE_VIDEO)){//小视频sVideoBean = SVideoBean(type, videoFilePath)}EventBus.getDefault().post(sVideoBean)navController?.popBackStack(R.id.nav_chat, false)} else if(enterType == CameraFragment.TYPE_MOMENT){TagUtils.d("跳转到发布:${type}, ${videoFilePath} , ${filePath}")navController?.popBackStack()var bundle = bundleOf(CommonUtils.Moments.TYPE_NAME to type,CommonUtils.Moments.TYPE_IMAGE_PATH to filePath,CommonUtils.Moments.TYPE_VIDEO_PATH to videoFilePath)navController?.navigate(R.id.action_moments_publish, bundle)} else {TagUtils.d("点击返回按钮:else  ")}}svideo_play_root.setOnClickListener {//svideo_play_view.onDestroy()svideoView?.onDestroy()Navigation.findNavController(it).popBackStack()}}override fun onResume() {super.onResume()}var isOnPause = falseoverride fun onStart() {super.onStart()if(isOnPause){svideoView?.onStart()isOnPause = false}}override fun onPause() {super.onPause()isOnPause = truesvideoView?.onStop()}override fun onStop() {super.onStop()}override fun onDestroy() {super.onDestroy()svideoView?.onDestroy()}}

相关内容

热门资讯

前端-session、jwt 目录:   (1)session (2&#x...
linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
关于测试,我发现了哪些新大陆 关于测试 平常也只是听说过一些关于测试的术语,但并没有使用过测试工具。偶然看到编程老师...
前缀和与对数器与二分法 1. 前缀和 假设有一个数组,我们想大量频繁的去访问L到R这个区间的和,...
nodejs:本地安装nvm实... 一、背景-使用不同版本node的原因 vue3+ts、nuxt3版本,node...
JAVA集合知识整理 Java集合知识整理 HashMap相关 HashMap的底层数据结构:jdk1.8之...
无刷直流电机介绍及单片机控制实... 无刷直流电机介绍及单片机控制实例前言基本概念优势与劣势使用寿命基本结构使用单片机控制实例电子调速器&...
fwdiary(2) dp2 1.传纸条  AcWing 275. 传纸条 - AcWing 走两条路,走一条最大的...
常用的DOS命令 常用的DOS命令 DOS(Disk Operating System,磁...
<C++> 类和对象(下) 1.const成员函数将const修饰的“成员函数”称之为const成员函数,cons...