工程结构
这里是做记录的,废话不多说先上项目图大体上分为四个部分
- gestures包 与手势相关的操作
- log包 日志相关
- scrollerproxy包 与滚动相关
-
剩下的就是核心代码 (图片的缩放)
工程结构
gestures包
-
UML类图
类图 - 接口
- GestureDetector
public interface GestureDetector {
//处理Imageview的OnTouchListener,详情见PhotoViewAttacher 类
boolean onTouchEvent(MotionEvent ev);
//是否真正缩放
boolean isScaling();
//是否正在拖拽,也就是手指没有离开Imagview
boolean isDragging();
//将一些手指状态返回,外部做处理
void setOnGestureListener(OnGestureListener listener);
}
public interface OnGestureListener {
//拖拽时调用 dx 水平方向发生的位置 dy 竖直方向发生的位移
void onDrag(float dx, float dy);
//快速滑动离开ImageView时调用,startX startY手指离开时的X,Y 坐标
//velocityX 水平方向的速度,velocityY 竖直方向的速度
void onFling(float startX, float startY, float velocityX,float velocityY);
//缩放时调用 缩放比例 手指点击的地方的X Y 坐标
void onScale(float scaleFactor, float focusX, float focusY);
}
- 工具类 VersionedGestureDetector
public final class VersionedGestureDetector {
//根据版本生成一个 GestureDetector 对象
public static GestureDetector newInstance(Context context,
OnGestureListener listener) {
final int sdkVersion = Build.VERSION.SDK_INT;
GestureDetector detector;
if (sdkVersion < Build.VERSION_CODES.ECLAIR) {
detector = new CupcakeGestureDetector(context);
} else if (sdkVersion < Build.VERSION_CODES.FROYO) {
detector = new EclairGestureDetector(context);
} else {
detector = new FroyoGestureDetector(context);
}
detector.setOnGestureListener(listener);
return detector;
}
}
网友评论