Kotlin高仿微信-第28篇-朋友圈-预览图片、预览小视频

news2024/11/24 12:57:36

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

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

效果图:

实现代码:

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

<layout>

    <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:id="@+id/svideo_play_root"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@drawable/wc_base_bg">

        <include layout="@layout/wc_base_top_title"/>

        <com.wn.wechatclientdemo.view.SVideoView
            android:id="@+id/svideo_play_view"
            app:layout_constraintTop_toBottomOf="@+id/base_top_root_layout"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            android:layout_width="match_parent"
            android:layout_height="match_parent"/>


        <androidx.appcompat.widget.AppCompatImageView
            android:id="@+id/photo_preview_icon"
            app:layout_constraintTop_toBottomOf="@+id/base_top_root_layout"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:visibility="visible"/>

        <androidx.appcompat.widget.AppCompatButton
            android:id="@+id/photo_preview_confirm"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintBottom_toBottomOf="parent"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginRight="20dp"
            android:layout_marginBottom="20dp"
            android:background="@drawable/wc_base_green_selector"
            android:visibility="visible"
            android:textColor="@color/white"
            android:textSize="20sp"
            android:textStyle="bold"
            android:text="完成"/>

    </androidx.constraintlayout.widget.ConstraintLayout>
</layout>

/**
 * Author : wangning
 * Email : maoning20080809@163.com
 * Date : 2022/5/24 16:11
 * Description : 朋友圈小视频播放
 */
class SVideoPlayFragment : BaseDataBindingFragment<WcSvideoPlayBinding>(){

    override fun getLayoutRes() = R.layout.wc_svideo_play

    private var navController: NavController? = null

    private var enterType: Int = 0
    private var isHideConfirm : Boolean = false

    private var svideoView: SVideoView? = null

    override 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 Int
        var 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.GONE
            photo_preview_icon.visibility = View.VISIBLE

            var 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.VISIBLE
            photo_preview_icon.visibility = View.GONE
            TagUtils.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? = null
                if(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 = false
    override fun onStart() {
        super.onStart()
        if(isOnPause){
            svideoView?.onStart()
            isOnPause = false
        }
    }

    override fun onPause() {
        super.onPause()
        isOnPause = true
        svideoView?.onStop()
    }

    override fun onStop() {
        super.onStop()
    }
    override fun onDestroy() {
        super.onDestroy()
        svideoView?.onDestroy()
    }

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/51031.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ios照片误删怎么恢复,iphone已经删除的照片怎么恢复

苹果手机里面的重要照片被删除了&#xff0c;相信很多人都比较着急&#xff0c;想要想办法找回来。ios照片误删怎么恢复&#xff1f; 方法1.通过“最近删除”恢复照片 苹果删除的照片如何恢复&#xff1f;一般情况下&#xff0c;从苹果手机刚删除的照片会暂存在“最近删除”这…

使用MAT分析线上问题实战

概述 MAT&#xff0c;下载地址&#xff0c;Eclipse Memory Analysis Tools&#xff0c;一个分析Java堆数据的专业工具&#xff0c;可以计算出内存中对象的实例数量、占用空间大小、引用关系等&#xff0c;可得知哪些线程阻止垃圾收集器的回收工作&#xff0c;从而定位内存泄漏…

如何低成本减少企业知识流失?天翎知识文档系统+群晖NAS值得一试

编者按&#xff1a;知识管理可以减少企业知识流失&#xff0c;有效提高企业员工工作水平&#xff0c;增强企业综合竞争力。如何小成本做好企业知识管理呢&#xff1f;天翎知识文档系统群晖NAS值得一试。 关键词&#xff1a;标签分类&#xff0c;权限管理&#xff0c;在线预览&…

Git学习

Git是什么 Github作为最大的代码托管平台&#xff0c;是基于Git开发的 Git是最优秀的版本控制工具 iCode是基于Git的代码托管平台 版本控制&#xff1a;是对软件开发过程中各种程序代码&#xff0c;配置文件&#xff0c;说明文档等。 版本控制系统&#xff1a;集中式、分布式 …

在Mac中管理多版本 java——安装和使用 jenv

jenv 的 github 地址:https://github.com/jenv/jenv 安装 $ brew install jenv安装成功后需要进行一下简单的配置,让它可以起作用 使用Bash的情况$ echo export PATH="$HOME/.jenv/bin:$PATH" >> ~/.bash_profile $ echo eval "$(jenv init -)" &…

MAC 搭建vue开发环境,配置环境变量

1.官网下载nodejs安装包 http://nodejs.p2hp.com/ 下载完成后安装&#xff0c;一直点击下一步即可 2.自定以配置全局模块路径和缓存路径 先自己找一个路径创建两个文件夹&#xff0c;node_cache 和 node_global 打开终端&#xff0c;执行一下俩条命令,注意引号中的路径要换…

图纸识别自动生成BOM清单的方法

01 方案应用领域及行业 高端装备制造业行业、离散型制造业、电气机械和器材制造业等。 02 方案应用场景 某特变电工公司是国内输变电行业的核心骨干企业&#xff0c;每年生产产能巨大&#xff0c;拥有海量的技术图纸&#xff0c;因此技术人员人工拆解设计图纸的工作难度系数大…

【优化调度】基于改进遗传算法的公交车调度排班优化的研究与实现(Matlab代码实现)

目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码 1 概述 本文对当前公交企业调度系统进行了分析&#xff0c;建立了公交排班的数学模型。本文基于数据挖掘分析的结果上&#xff0c;使用截面客流量数据对模型进行约束&#xff0c;得出了公交客流出行的空间分布规律。再以…

软件测试1

这里写自定义目录标题软件测试的定义1、软件测试的目的2、软件测试的要求3、测试与开发的模型3.1 测试的工作流程3.2 开发模型3.2.1 瀑布模型3.2.2 增量模型3.2.3 快速模型3.2.4 其他模型3.3 测试模型4、测试与开发的关系5、软件测试分类软件测试的定义 找Bug,发现缺陷。使用人…

全球科学家给孩子的stem课【001-046】mp3合集

全球科学家给孩子的stem课【001-046】mp3合集&#xff0c;适合给孩子们启蒙教育使用。 一只蚂蚁走丢后的8种可能结局.mp3 下雨天清爽的味道&#xff0c;来自尸体和臭气.mp3 为什么光的三原色是红绿蓝&#xff0c;绘画的三原色又成了红黄蓝&#xff1f;.mp3 为什么剖腹产的孩子…

患有癌症的心力衰竭患者LVAD植入前景可期

相关调查显示&#xff0c;患有终末期心力衰竭的癌症患者&#xff08;有癌症史&#xff09;正在增加&#xff0c;但其进行心脏移植的可能性不大&#xff0c;而左心室辅助装置&#xff08;LVAD&#xff09;是一种可选择的替代策略。近日&#xff0c;发表于Circulation: Heart Fai…

[附源码]SSM计算机毕业设计疫情期间回乡人员管理系统JAVA

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Kotlin高仿微信-第27篇-朋友圈-相册选择图片或小视频

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

ContentProvider启动流程分析

文章目录1.ActivityThread.handleBindApplication()2.ActivityThread.installContentProviders()3.ActivityThread.installProvider()4.AppComponentFactory.instantiateProvider()5.ActivityManagerService.publishContentProviders()6.ContentProviderHelper.publishContentP…

基于Web的美食分享平台的设计与实现——HTML+CSS+JavaScript水果介绍网页设计(橙子之家)

&#x1f468;‍&#x1f393;静态网站的编写主要是用HTML DIVCSS JS等来完成页面的排版设计&#x1f469;‍&#x1f393;,常用的网页设计软件有Dreamweaver、EditPlus、HBuilderX、VScode 、Webstorm、Animate等等&#xff0c;用的最多的还是DW&#xff0c;当然不同软件写出的…

[附源码]计算机毕业设计springboot汽车租赁管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

项目的坎坷一生

一、从产品到项目 项目的定义&#xff1a;只会进行一次&#xff0c;包含多项互相关联的任务&#xff0c;并且有绩效、时间、成本和范围限制的一项工作。 产品是解决某个问题的东西&#xff0c;项目是一个过程。 1、做产品VS做项目 ①从生命周期角度区别 做产品的生命周期相…

[附源码]JAVA毕业设计的问卷调查系统设计与实现(系统+LW)

[附源码]JAVA毕业设计的问卷调查系统设计与实现&#xff08;系统LW&#xff09; 目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 …

dreamweaver网页设计作业制作 学生个人网页猫眼电影 WEB静态网页作业模板 大学生个人主页博客网页代码 dw个人网页作业成品

HTML实例网页代码, 本实例适合于初学HTML的同学。该实例里面有设置了css的样式设置&#xff0c;有div的样式格局&#xff0c;这个实例比较全面&#xff0c;有助于同学的学习,本文将介绍如何通过从头开始设计个人网站并将其转换为代码的过程来实践设计。 文章目录一、网页介绍一…

高校房产管理系统应具备哪些基本功能?

数图互通经过多年高校房产管理实施认为高校房产管理系统应用层面应具备的基本功能如下&#xff1a; 1、框架平台&#xff08;含系统管理、系统接口&#xff09; 框架平台包含系统权限管理、用户管理、角色管理、菜单管理、VPA数据权限管理、数据字典管理、系统日志管理、数据…