天天看点

从pinchImageView学习对象池

pinchImageView是一个能够实现完美图片手势操作的框架,包括,捏合手势放大缩小,双击放大缩小,大图边界和小图回弹效果。里面为了防止发生抖动,采用了对象池的方式,感觉挺有意思,记录分析一下。

项目源码地址:​​​https://github.com/boycy815/PinchImageView​​

对象池父类

private static abstract class ObjectsPool<T> {
        private int mSize;

        private Queue<T> mQueue;

        public ObjectsPool(int size) {
            mSize = size;
            mQueue = new LinkedList<T>();
        }

        public T take() {
            if (mQueue.size() == 0) {
                return newInstance();
            } else {
                return resetInstance(mQueue.poll());
            }
        }

        public void given(T obj) {
            if (obj != null && mQueue.size() < mSize) {
                mQueue.offer(obj);
            }
        }

        abstract protected T newInstance();

        abstract protected T resetInstance(T obj);
    }      
private static class MatrixPool extends ObjectsPool<Matrix> {

        public MatrixPool(int size) {
            super(size);
        }

        @Override
        protected Matrix newInstance() {
            return new Matrix();
        }

        @Override
        protected Matrix resetInstance(Matrix obj) {
            obj.reset();
            return