学更好的别人,
做更好的自己。
——《微卡智享》
本文长度为3862字,预计阅读9分钟
分屏异显
做POS销售的朋友应该都知道,现在的很多POS机销售都是两个显示器,对面的那个显示销售的产品和播放广告作用,在Windows中实现其实很简单,直接做一个新的窗体,然后在桌面设置双屏为扩展,显示的时候起始坐标为第一屏的分辨率后开始就可以了,因为现在主要做Android,有可能会用这个方面,所以提前研究了一下,做了个简单的小显示,没作任何优化。
实现效果
![](https://i-blog.csdnimg.cn/blog_migrate/3c49773a66a660b04cbe2b89c3b9f137.png)
微卡智享
Presentation类
![](https://i-blog.csdnimg.cn/blog_migrate/3c49773a66a660b04cbe2b89c3b9f137.png)
微卡智享
Presentation是一个特殊的dialog,它的目的是显示内容到第二屏幕。在Presentation创建的时候关联一个目标设备,确定Presentation要显示在那个设备上,根据这个设备的信息来配置Presentation的context和resources信息。
当Presentation附属的display被移除的话,Presentation就会自动被取消。当创建Presentation的Activity自己处于paused或者resumed,无论Presentation在显示什么内容,该Activity就要关心对Presentation 进行pausing and resuming。
使用流程
![](https://i-blog.csdnimg.cn/blog_migrate/3c49773a66a660b04cbe2b89c3b9f137.png)
微卡智享
# | 需要掌握的技能 |
---|---|
1 | 通过DisplayManager获取Display个数,如果大于1就说明有多个屏幕,然后获取自己要定义的display |
2 | 创建类继承自Presentation,在构造函数中传入当前的Activity和display,通过setContentView加载布局文件,所以自己设置xml |
3 | 设置窗口显示类型 |
4 | 通过show方法直接调用出来 |
由上面的步骤可以看出来,使用这个还是非常简单的,我的代码中使用了JzVideo的第三方框架,具体怎么用可以看《学习|Android播放网络视频综合运用》
布局文件
主界面中一个EditText,一个Button和一个TextView
第二屏的布局里面一个JzVideostd,一个TextView
secPresentation代码
package com.vaccae.displaydemo
import android.app.Presentation
import android.content.Context
import android.os.Bundle
import android.view.Display
import android.widget.Toast
import com.bumptech.glide.Glide
import kotlinx.android.synthetic.main.second_display.*
/**
* 作者:Vaccae
* 邮箱:3657447@qq.com
* 创建时间:2020-03-03 13:44
* 功能模块说明:
*/
class secPresentation : Presentation {
private lateinit var mContext: Context
constructor(outerContext: Context?, display: Display?) : super(outerContext, display){
mContext = outerContext!!
}
fun settext(msg: String) {
prdshow.text = msg + "\r\n"
}
fun appendtext(msg: String) {
prdshow.append(msg + "\r\n")
}
fun setvideo(videourl: String, title:String ,picurl: String) {
jzvideo2.setUp(videourl,title)
Glide.with(mContext).load(picurl).into(jzvideo2.thumbImageView)
jzvideo2.startVideo()
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.second_display)
}
}
Activity代码
package com.vaccae.displaydemo
import android.content.Context
import android.content.Intent
import android.hardware.display.DisplayManager
import android.net.Uri
import android.os.Build
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.provider.Settings
import android.view.Display
import android.view.WindowManager
import android.widget.Toast
import com.bumptech.glide.Glide
import com.danikula.videocache.HttpProxyCacheServer
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity() {
private lateinit var proxyCacheServer: HttpProxyCacheServer
private val videos = arrayOf(
"http://www.sumsoft.cn/vedio/prnbluetooth.mp4",
"http://www.sumsoft.cn/vedio/SMPRM.mp4"
)
private val pictures = arrayOf(
"http://www.sumsoft.cn/uploads/allimg/191012/1-191012141244.png",
"http://www.sumsoft.cn/uploads/191210/1-1912101G154606.png"
)
// 屏幕管理类
private lateinit var mDisplayManager: DisplayManager
//第二屏类
private lateinit var secondPresentation: secPresentation
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
proxyCacheServer = HttpProxyCacheServer(this)
mDisplayManager = getSystemService(Context.DISPLAY_SERVICE) as DisplayManager
val displays = mDisplayManager.displays
tvshow.text = "屏幕个数" + displays.size + "\r\n"
displays.forEach { it ->
tvshow.append("名称:" + it.name + " ID:" + it.displayId + "\r\n")
}
btnset.setOnClickListener {
if (displays.size > 1) {
secondPresentation.appendtext(edtinput.text.toString())
}
}
//将最后一个屏幕设置为第二屏
if (displays.size> 1) {
try {
val url=proxyCacheServer.getProxyUrl(videos[1])
val picurl=pictures[1]
val seconddisplay = displays[displays?.size!!.minus(1)]
secondPresentation = secPresentation(this, seconddisplay)
secondPresentation.window?.setType(WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY)
secondPresentation.show()
secondPresentation.setvideo(
url,
"商盟质量追溯系统",
picurl
)
} catch (e: Exception) {
tvshow.append(e.message.toString()+"\r\n")
Toast.makeText(this,e.message.toString(),Toast.LENGTH_SHORT).show()
}
}
}
}
程序运行起来就是我们开始视频中的效果了
小贴士:如果自己没法外接屏幕的话,手机可以打开开发者选项--绘图--模拟辅助显示设备,自己选一个大小的屏幕也可实现双屏的效果
完
扫描二维码
获取更多精彩
微卡智享
「 往期文章 」