学习|Android中Presentation分屏的简单使用

原创
2020/03/16 09:00
阅读数 2K



学更好的别人,

做更好的自己。

——《微卡智享》





本文长度为3862,预计阅读9分钟




分屏异显

做POS销售的朋友应该都知道,现在的很多POS机销售都是两个显示器,对面的那个显示销售的产品和播放广告作用,在Windows中实现其实很简单,直接做一个新的窗体,然后在桌面设置双屏为扩展,显示的时候起始坐标为第一屏的分辨率后开始就可以了,因为现在主要做Android,有可能会用这个方面,所以提前研究了一下,做了个简单的小显示,没作任何优化。



实现效果

微卡智享


Presentation类

微卡智享


Presentation是一个特殊的dialog,它的目的是显示内容到第二屏幕。在Presentation创建的时候关联一个目标设备,确定Presentation要显示在那个设备上,根据这个设备的信息来配置Presentation的context和resources信息。

当Presentation附属的display被移除的话,Presentation就会自动被取消。当创建Presentation的Activity自己处于paused或者resumed,无论Presentation在显示什么内容,该Activity就要关心对Presentation 进行pausing and resuming。


使用流程

微卡智享


# 需要掌握的技能
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.Presentationimport android.content.Contextimport android.os.Bundleimport android.view.Displayimport android.widget.Toastimport com.bumptech.glide.Glideimport 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.Contextimport android.content.Intentimport android.hardware.display.DisplayManagerimport android.net.Uriimport android.os.Buildimport androidx.appcompat.app.AppCompatActivityimport android.os.Bundleimport android.provider.Settingsimport android.view.Displayimport android.view.WindowManagerimport android.widget.Toastimport com.bumptech.glide.Glideimport com.danikula.videocache.HttpProxyCacheServerimport 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() } }
}

}

程序运行起来就是我们开始视频中的效果了



小贴士:如果自己没法外接屏幕的话,手机可以打开开发者选项--绘图--模拟辅助显示设备,自己选一个大小的屏幕也可实现双屏的效果





扫描二维码

获取更多精彩

微卡智享



「 往期文章 」


Android通讯库VNanoMsg的1.0.1发布

学习|Android制作开源库

NanoMsg框架|Android的各模式通讯封装(不另编译动态库附DEMO地址)




本文分享自微信公众号 - 微卡智享(VaccaeShare)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部