当前位置: 代码迷 >> Android >> [android_gallery_4.0]gallery重要类介绍(三)
  详细解决方案

[android_gallery_4.0]gallery重要类介绍(三)

热度:65   发布时间:2016-05-01 12:06:04.0
[android_gallery_4.0]gallery主要类介绍(三)
3.1.5 PhotoPage

其类图如下。


一般创建流程如下。顺序无先后
1)绘制视图,添加需要用到的控件或各种view。
2)为需要侦听者的控件或view加侦听者。
3)绑定相应model,例如这里绑定photopage.model。
4)创建渲染对象,GLView。各个视图用到的view都是加载在其上的,通过GLView.addComponent()实现。
其他主要page,诸如albumsetpage、albumpage。
相关类说明
1)PhotoView.PhotoTapListener
主要是处理onSingleTapUp事件。用于处理点击媒体文件时的动作。
2)PhotoView
主要处理photo的view。
其类图如下。

2.1)ScreenNailEntry
主要保存上下两个缩略图的显示的数据,显示这两个缩略图。
手势识别相关
ScaleGestureDetector、GestureDetector、DownUpDetector、PositionController都是跟手势识别相关的。例如左滑动、右滑动切换图片,手势放大图片等,以及过渡动画。
2.2)TileImageView
负责每个图片的处理流程。
存在一个状态机,标示每种decode相关的状态。如下图:

Tile作为一个绘制的单位,可以理解为,其封装了解码后的图片数据。TileQueue是存放tile的队列,这些tile就是等待最终调用canvas绘制的数据。GLCanvas就是封装了canvas的类。
Tileimageview.render就是绘制图片的开始。里面会调用到queueForDecode()将绘制的tile丢入tilequeue中等待被处理。一旦轮到该tile被绘制,则调用decodetile将此tile解码。
ImageCacheRequest.run调用DecodeUtils. requestDecode完成最终的解码操作。
存在三个队列,如下:
Decodequeue:存放等待decode的tile。
Uploadqueue:存放等待upload的tile。Upload就是将解码的数据送到CAVANS绘制出来,因此都是从decode中出来的。
Recycledqueue:存放要回收的tile。
mActiveTiles用于存放已激活的tile的map。
2.3)EdgeView
缩略图中每张图的蓝色外框。
2.4)Model
用于沟通UI层与数据层的桥梁。
其定义如下。

    public static interface Model extendsTileImageView.Model {

        public void next();

        public void previous();

        public void jumpTo(int index);

        public int getImageRotation();

 

        // Return null if the specified imageis unavailable.

       public ImageDatagetNextImage();

        public ImageData getPreviousImage();

    }

2.5)ProgressSpinner
进度圆圈。
2.6)手势识别处理相关
private final ScaleGestureDetector mScaleDetector;//两点触摸放大缩小等处理
private final GestureDetector mGestureDetector;
private final DownUpDetector mDownUpDetector;//点击处理相关
private PhotoTapListener mPhotoTapListener;
private final PositionController mPositionController;
3)FilmStripView.Listener
显示图片下方的缩略图滚动条的处理侦听者。主要涉及点击跳转的侦听。如下
public interface Listener {
// Returns false if it cannot jump to the specified index at this time.
boolean onSlotSelected(int slotIndex);
}


4)FilmStripView
处理在这个 控件之上的操作,诸如触摸移动长按等动作。


  相关解决方案