Android实现多点触控,自由缩放图片的实例代码实现多点触控,自由缩放图片的实例代码
Android多点触控涉及到的知识点
1、ScaleGestureDetector
2、OnScaleGestureListener
3、Matrix
4、OnTouchListener
四个知识点需要了解一下,需要注意的是Matrix在内存中是一个一维数组,操控图片的Matrxi是一个3X3的矩阵,在内存中也
就是一个大小为9的一维数组。
实现多点触控,自由变化图片
1、 ImageView的基础上继承
2、因为要在图片加载完成就获取到相关的属性,所以实现OnGlobalLayoutListener接口,并实现方法onGlobalLayout
注册OnGlobalLayoutListener接口:
@Override
protected void onAttachedToWindow() {
super.onAttachedToWindow();
//注册 OnGlobalLayoutListener
getViewTreeObserver().addOnGlobalLayoutListener(this);
}
@Override
protected void onDetachedFromWindow() {
super.onDetachedFromWindow();
//注销 OnGlobalLayoutListener
getViewTreeObserver().removeOnGlobalLayoutListener(this);
}
实现onGlobalLayout方法
@Override
public void onGlobalLayout() {
//因为要在加载完成的时候就获取到图片的宽高 然后让图片的宽高去适应控件的宽高大小 isOnce只在第一次加载到时候处理
if (isOnce) {
//下一步3 获取相关属性 并做处理
isOnce = false;
}
}
3、
//获取控件的宽高
int width = getWidth();
int height = getHeight();
//获取图片
Drawable drawable = getDrawable();
if (null == drawable) {
return;
}
//获取到图片的宽高 **根据drawable的这两个方法获取
int dw = drawable.getIntrinsicWidth();
int dh = drawable.getIntrinsicHeight();
//定义一个图片缩放值
float scale = 1.0f;
接下来就是根据图片的宽和高 控件的宽和高 去设置这个scale值
//当图片的宽大于了控件的宽 图片的高小于控件的高
if (dw > width && dh < height) {
scale = width * 1.0f / dw;