天天看點

從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