推荐内置android控件的开源项目alcinoe
开源地址:https://github.com/Zeus64/alcinoe
该控件包,含以下几个控件:
1.基于OpenGL实现的视频播放器 ALVideoPlayer.
ALVideoPlayer将一个视频绘制到一个TEXTURE。可以将视频完全集成到delphi form中,并且可以将任何需要的控件放在顶部,因为它支持Z-ORDER。官方的delphi视频播放器只是form顶部的原生视频播放器窗口,因此不支持Z-ORDER。
在android下作者使用ExoPlayer。ExoPlayer支持诸如动态自适应HTTP流媒体(DASH),HLS,SmoothStreaming和Common Encryption等功能,MediaPlayer不支持这些功能。它的设计很容易定制和扩展。在Ios下使用的AVPlayer也支持HLS,比如exoplayer。
2.实现了内置控件TEdit/TMemo,支持ios与android.
这个重要,官方说10.3为android实现内置控件TEdit,现在我们提前有用的了!内置控件有什么好处,当然是效率与无bug.到现在Firemonkey的TEdit/TMemo还有bug.
3.高效的doublebuffered firemonkey控件,实现了原生绘制速度
- Rectangle
- Circle
- Text (Can also draw html text on ios/android/win/macos)
- Glyph
- etc.
我试着运行了作者提供的Demo,真是快的不得了,作者不是吹牛的。是Delphi自带的2陪速度。
4.改进了firemonkey控件
- ScrollBox
- TabControl
- RangeTrackBar
还有其他方面的内容,具体可以去看,上面的内容已经足够吸引我用了!
在试用过程中,发现在android 4.4.4上出错,在android 7.1.1正常,已经提交了问题,不知作者会不会修改,来支持低版本的android了。
后记:作者很勤奋,今早就给出了修正,解决在android 4.4.4上的问题:
找到fSurfaceTexture.setOnFrameAvailableListener(FOnFrameAvailableListener, fHandler);改成下面这样:
try
fSurfaceTexture.setOnFrameAvailableListener(FOnFrameAvailableListener, fHandler);
except
fSurfaceTexture.setOnFrameAvailableListener (FOnFrameAvailableListener); // api android <21
end;
同时,作者也说:But by calling without locking the handle there are crashes in the video ...
Any light on it would help a lot.
在android 4.4.4上能运行了,于是做了进一步测试:


左侧图是使用ALFmxControls的绘图效率,平均近52帧,右侧图为Delphi原生绘制效率,平均11帖,近5陪的差别。
在我的红米1S上能得到这样效率,真不可思异,要知道,作为测试机,这可是近三年多的机器,只能证明作者这个控件实现的太牛了!
估计看到这里,你也想试试,果真有这么神奇吗。相信我,不骗你,一试便知。反正我是准备在项目中启用这个控件了,虽然说尽量不用第三方控件,以减少项目后期的维护量,但对于这个开源控件来说,值得投入。
如果真要试用,还得有思想准备,就是整个开源内容近1G大小,拉回来不容易,我是拉了半天整不回来,还是Q友努力传给我的。如果你也需要,也可以找我,我的QQ:391879。
2018.8.2,作者支持了Delphi 10.2.3 ,并更新了Demo.
推荐内置android控件的开源项目alcinoe的更多相关文章
- AE内置Command控件使用
樱木 原文 AE内置Command控件使用 直接使用AE内置的Command控件来完成功能 1.拉框放大 /// <summary> /// 放大 /// </summary> ...
- Android 常用炫酷控件(开源项目)git地址汇总
第一部分 个性化控件(View) 主要介绍那些不错个性化的 View,包括 ListView.ActionBar.Menu.ViewPager.Gallery.GridView.ImageView.P ...
- js 调用IE内置打印控件
转自学网(http://www.xue5.com/itedu/200802/102909.html) WebBrowser是IE内置的浏览器控件,无需用户下载. 一.WebBrowser控件 < ...
- android控件的属性
android控件的属性 本节描述android空间的位置,内容等相关属性及属性的含义 第一类:属性值为true或false android:layout_centerHrizontal 水平居中 ( ...
- Android控件TextView的实现原理分析
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/8636153 在前面一个系列的文章中,我们以窗口 ...
- Android群英传笔记——第三章:Android控件架构与自定义控件讲解
Android群英传笔记--第三章:Android控件架构与自定义控件讲解 真的很久没有更新博客了,三四天了吧,搬家干嘛的,心累,事件又很紧,抽时间把第三章大致的看完了,当然,我还是有一点View的基 ...
- Android控件常见属性
1.宽/高android:layout_width android:layout_height// 取值match_parent //匹配父控件wrap_content //自适应,根据内容 如果指定 ...
- Android控件RecyclerView的基本用法
Android控件RecyclerView的基本用法 转 https://www.jianshu.com/p/e71a4b73098f github: https://github.com/Cym ...
- [Android Pro] android控件ListView顶部或者底部也显示分割线
reference to : http://blog.csdn.net/lovexieyuan520/article/details/50846569 在默认的Android控件ListView在 ...
随机推荐
- 第二阶段——个人工作总结DAY02
1.昨天做了什么:昨天学习了Intent跳转的知识. 2.今天打算做什么:来实现这个功能. 3.遇到的困难:不会用隐式跳转,只会用显式跳转.
- 媒体查询漫谈——@media Queries
通过不同的媒体类型和条件定义样式表规则.媒体查询让CSS可以更精确作用于不同的媒体类型和同一媒体的不同条件.媒体查询的大部分媒体特性都接受min和max用于表达”大于或等于”和”小与或等于”.如:wi ...
- Homebrew 安装mysql
在mac上安装软件,无疑安装一个brew是个很好的选择,关于brew是什么,怎么安装建议去brew官网查看, 附上地址:brew官网 还有一篇博文 http://www.cnblogs.com/xd ...
- Django之WSGI 和MVC/MTV
一.什么是WSGI? WEB框架的本质是一个socket服务端接收用户请求,加工数据返回给客户端(Django),但是Django没有自带socket需要使用 别人的 socket配合Django才能 ...
- vue 父组件通过props向子组件传递数据/方法的方式
参考网址:https://segmentfault.com/a/1190000010507616 下面栗子中, callback是传递父组件的方法, mutationName是传递父组件的数据, Ap ...
- 解决libvlc_media_player_stop时死锁的方法
转自:http://www.jiazi.cn/blog/?id=56 扩散该解决方法 最近需要使用VLC控件来做一个简单的流媒体播放器,在实施过程中,发现在调用libvlc_media_player_ ...
- Java Web(四) 过滤器Filter
Filter概述 Filter意为滤镜或者过滤器,用于在Servlet之外对request或者response进行修改.Filter提出了过滤链的概念.一个FilterChain包括多个Filter. ...
- 服务注册和发现(Consul)
使用Consul提供注册和发现服务 什么是 Consul Consul 是 HashiCorp 公司推出的开源工具,用于实现分布式系统的服务发现与配置.与其它分布式服务注册与发现的方案,Consul ...
- ssh三大框架整合
spring+struts2+hibernate 参考1:数据库为oracle http://takeme.iteye.com/blog/1678268 参考2:数据库为mysql http://bl ...
- Oracle exists 和not exists 用法详解
有两个简单例子,以说明 “exists”和“in”的效率问题 1) select * from T1 where exists(select 1 from T2 where T1.a=T2.a) ; ...