列表播放视频简单实现
最近因项目需求,需要在滚动列表中播放视频。查了半天资料,发现其实现没有想象中的那么难。
原理
众所周知,由于SurfaceView没有UI同步缓冲区,就导致了在列表滚动的时候,正在播放的视频跟不上滚动的步伐;而在SDK 15的时候,谷歌官方提供了新的具有UI同步缓存的视频播放api TextureView。
本文真是基于该新Api实现。
最近因项目需求,需要在滚动列表中播放视频。查了半天资料,发现其实现没有想象中的那么难。
众所周知,由于SurfaceView没有UI同步缓冲区,就导致了在列表滚动的时候,正在播放的视频跟不上滚动的步伐;而在SDK 15的时候,谷歌官方提供了新的具有UI同步缓存的视频播放api TextureView。
本文真是基于该新Api实现。
最近在为河北电信做定制游戏平台开发的时候,遇到了一个很奇怪的问题,在某些盒子上,从平台打开某些游戏,玩上几分钟,然后该退出游戏,回到公司的游戏平台后,便出现了页面数据丢失的问题。
排查了几天(在这不得不吐槽电信的官僚主义,好话说尽,给予各种承诺,依然不提供可以进行adb调试的测试盒子)。最终发现是由于盒子内存太小(几年前的标准,1G内存!!!),当运行大型游戏后,盒子系统自动kill了公司的游戏平台,吐血啊。
该问题如下图所示:
从去年开始,从事Android TV开发已经大半年了,期间遇到过各种各样的坑,最严重、最难解决的莫过于焦点问题。痛定思痛,决定把TV开发中遇到的各种坑一一分享出来,让更多的人不再爬我所爬过的坑。
在TV开发中,VerticalGridView是谷歌专门为Android TV适配的RecyclerView,VerticalGridView很好的解决了列表的焦点问题,但是如果使用不当,很容易出现item子项焦点错乱问题。
在TV开发中尽量尽可能不适用没有优化过的RecyclerView!!!!!
进入列表界面,我希望的是按上下左右按键,item将能取得焦点,实现放大效果,但是我的实际效果如图所示,按上下键,变成了列表上下滚动,而不是我希望实现的item放大。
其实断点续传的原理很简单,从字面上理解,所谓断点续传就是从停止的地方重新下载。
断点:线程停止的位置。
续传:从停止的位置重新下载。
用代码解析就是:
断点 : 当前线程已经下载完成的数据长度。
续传 : 向服务器请求上次线程停止位置之后的数据。
原理知道了,功能实现起来也简单。每当线程停止时就把已下载的数据长度写入记录文件,当重新下载时,从记录文件读取已经下载了的长度。而这个长度就是所需要的断点。
续传的实现也简单,可以通过设置网络请求参数,请求服务器从指定的位置开始读取数据。
而要实现这两个功能只需要使用到httpURLconnection里面的setRequestProperty方法便可以实现.
public void setRequestProperty(String field, String newValue) |
如下所示,便是向服务器请求500-1000之间的500个byte:
conn.setRequestProperty("Range", "bytes=" + 500 + "-" + 1000); |
以上只是续传的一部分需求,当我们获取到下载数据时,还需要将数据写入文件,而普通发File对象并不提供从指定位置写入数据的功能,这个时候,就需要使用到RandomAccessFile来实现从指定位置给文件写入数据的功能。
public void seek(long offset) |
如下所示,便是从文件的的第100个byte后开始写入数据。
raFile.seek(100); |
而开始写入数据时还需要用到RandomAccessFile里面的另外一个方法
public void write(byte[] buffer, int byteOffset, int byteCount) |
该方法的使用和OutputStream的write的使用一模一样…
以上便是断点续传的原理。
Fragment 是android开发中最常用的组件之一,用了好几年,我都不知道Fragment到底是个什么东西,Activity加载Fragment的原理是怎样的,为什么官方会叫它为碎片?直到前段时间因为工作需要,从头看来一遍Fragment的源代码,然后就有了本文。
本文将从commit开始一步步带你走向Fragmnt的生命周期!!
在上两篇文章中,我们已经实现了基本的界面的布局和移动效果,但是mImgShotView
、mContentView
却不能响应事件,而事件的响应就需要我们手动进行事件分发!
android 仿当乐游戏详情页面(一)
android 仿当乐游戏详情页面(二)
android 仿当乐游戏详情页面(三)
在上一篇文章里面,基本上算是实现了该效果的布局,有了布局,接下来就要对布局进行移动处理。
android 仿当乐游戏详情页面(一)
android 仿当乐游戏详情页面(二)
android 仿当乐游戏详情页面(三)
前段时间接到了这样一个需求,要求实现一个和当乐游戏详情界面类似的界面;这是当乐游戏详情页面的效果!!
android 仿当乐游戏详情页面(一)
android 仿当乐游戏详情页面(二)
android 仿当乐游戏详情页面(三)
这段时间由于找工作的原因,下载了boss直聘,在ios最新版(4.1)上点击首页列表进行页面跳转的那个效果感觉很炫,但是android最新版本(4.2)上却没有对应的效果,不知道以前版本有没有,感觉很好奇,所以就有了本文…
在开发中,我们经常碰到这样的控件,用来切换不同的Fragment
这种控件的实现的效果有多种多样,一般来说我们都是使用一个LinearLayout嵌套几个Button来实现,然后通过for循环来实现单一的选择。
可以这样说,Log日志是除了debug外我们调试程序的全部了,但是在实际的开发中,系统原生的Log功能并不强大,它只能打印简单的字符串,如果碰到JSON,MAP一类的特殊字符串它的打印效果将极其糟糕。
机缘巧合下,我有幸见在github上见到了一个功能很强大的LOG日志库Logger,它功能强大,当你使用它打印LOG日志时,它不仅能把普通的字符串打印出来,甚至能定位你打印的位置。并且它能直接将JSON字符串格式化并打印出来,省下了我们手动格式化JSON字符串的时间。
下面是它的打印效果图
最近手机升级了5.0系统后,突然间发现微信竟然有IOS一样的侧滑关闭当前页面的效果,就想把这种效果也加进自己的项目里面。本着不重复造轮子的原则,就在网上百度了很久,发现大多数人都是采用自定义View来实现,但是对于我这种已经基本完成的项目来说,如果全部的Activity再重新使用自定义的View无疑是一种可怕的噩梦。
因此,我这里实现了另外一种不需要自定义View也能实现的方法,其子类只要继承于它,便能拥有其侧滑滑动的功能。
随便说一句,此方法仅对5.0以上的手机有效(反正微信也是5.0上才能用),5.0以下的请无视!!!
以上都是废话~~~~
IOC框架称为控制控制反转框架也称为依赖注入框架,依赖注入(DI)和控制反转(IOC)是从不同的角度的描述的同一件事情,就是指通过引入IOC容器,利用依赖关系注入的方式,实现对象之间的解耦。
在写一个框架之前,我们需要了解下IOC的相关概念。
简单来说,对象和IOC容器的关系就像电脑和外设之间的关系,其中电脑相当于对象,而IOC容器相当于一个个不同的电脑外设。外设具有不同的功能,并且他们和电脑之间都遵循着某种协议(如USB2.0协议),因此它们在彼此独立的同时却又能相互联系。
输入功能原本属于电脑的,但是外设键盘却能通过电脑提供的相关接口来控制电脑的输入功能,这就是IOC概念里面的控制反转。由于电脑和外设间都遵循着USB协议,键盘便可以实现随意切换,却不影响键盘的输入功能,这就是IOC概念里面的依赖注入。
好了,了解完IOC协议后,便可以开始绘制相应的架构图了。