public final ArrayList<Layer> hitTestList = newArrayList<Layer>();
public final ArrayList<Layer> systemList = new ArrayList<Layer>();
Layer提供了update(....),renderOpaque(....),renderBlended(....)接口,这些接口会在RenderView的onDrawFrame绘制代码中被调用。GridLayer 中有个 GridDrawManager,专门负责绘制,在前面的那几个接口中会调用到GridDrawManager的一些具体绘制函数。
由于所有界面都同属于一个activity,所以所有的事件触发动作都来源于主线程,实际上是主线程中的RenderView的onTouchEvent。
在这里它将所有的触屏事件放在一个待处理的事件队列里面,当队列里面的事件数大于8或者该事件属于拖动事件的时候它将等待,否则会将该事件加入队列,并调用requestRender()请求绘制。于是会重新调用RenderView的onDrawFrame绘制代码,其中有个函数processTouchEvent(),这个函数的主要功能是负责处理事件队列中的事件,查找该事件来源于哪个控件(对应具体的某个Layer子类),然后将事件分发给该控件处理,控件接受到事件的时候会调用自身的onTouchEvent()函数,在这里会根据事件的不同设置一些不同的数据主要是给绘制的时候要用的,最终会调用到真正的事件处理类GestureDetector.Java的相关方法包括对是否是双击、单击等。在这里需要说明一下,它并没有把响应事件的具体实现放在每个layer的子类中,而是提取出了一个类GestureDetector.Java专门负责响应事件。以上就是整个事件的响应流程,事件统一由RenderView负责创建,然后根据条件的不同下发给相应的控件响应。
相册界面,缩略图界面,以及图片浏览界面等,这些界面的跳转不同于activity之间的跳转,因为它们并不是每个都对应一个单独的activity而是共享一个activity。Gallery3D里面用不同的状态来标识不同的界面。
状态的变化引起界面的变化,Gallery3D里面采用了通知模式,状态变化的接口为GridLayer中的public void setState(int state),通知接口为HudLayer中的public void onGridStateChanged()。界面的切换是由事件发起的,因此在事件的响应函数里面会对用户的触屏动作分解成一个个的状态,如刚进入Gallery3D的时候会通过调用setState(STATE_MEDIA_SETS)设置状态为STATE_MEDIA_SETS,并发送通知即调用onGridStateChanged()最后调用HudLayer的updateViews()方法进行绘制与更新,从而进入相册界面;同样当用户点击相册的时候,会改变状态为STATE_GRID_VIEW,然后重新绘制界面进入缩略图界面,其他界面的切换也是同样的道理,当状态没有发生变化的时候将不会执行回调函数setState()和onGridStateChanged()。
3 软件设计
3.1 设计目标
本论文的设计目标是要提供给android手机用户一款能阅读G、PNG等支持大多数格式手机图片的浏览软件。具有如下特性:
功能完善:具有图册功能。能以2D/3D模式切换浏览手机图片。可以直接打开SD卡,浏览文件,支持手机直接打开图片,对图片进行操作。具有查看网络图片功能,保存网络图片。
可扩展:本软件可对网络查看进行扩展,可以实现云相册。图册功能可以增加缩略图显示。增加图片发送功能。
易用性:基于android平台图片浏览软件操作简单,通过手指滑动、触摸和点击对软件进行操作。
通用性:本软件支持最低系统android 2.3,支持最高android 4.2系统。基于android操作系统的智能手机80%可以使用该软件。
3.2 软件功能需求
实现android手机用户对图片浏览的需求。能够阅读G或PNG、GIF格式手机图片。
3.2.1 图册
对图片进行分类,不同的图片放到不同的图册内。 Android平台手机图片浏览软件的开发实现(8):http://www.youerw.com/jisuanji/lunwen_2019.html