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