Android实现手势滑动多点触摸放大缩小图片效果

2019-12-10 19:07:12刘景俊
易采站长站为您分析Android实现手势滑动多点触摸放大缩小图片效果的相关资料,需要的朋友可以参考下  

网上文章虽多,但是这种效果少之又少,我真诚的献上以供大家参考

实现原理:自定义ImageView对此控件进行相应的layout(动态布局).

这里你要明白几个方法执行的流程:

首先ImageView是继承自View的子类.
onLayout方法:是一个回调方法.该方法会在在View中的layout方法中执行,在执行layout方法前面会首先执行setFrame方法.
setFrame方法:判断我们的View是否发生变化,如果发生变化,那么将最新的l,t,r,b传递给View,然后刷新进行动态更新UI. 并且返回ture.没有变化返回false.
在介绍自定义控件之前,我们先要明白我们要获取哪些数据:屏幕的宽度,屏幕的高度.(这里其实你也可以对LinerLayout进行ViewTreeObserver监听获取其宽高度.),原始图片本身的宽度及高度.以及我们缩放的最大最小值.
首先我们要重写setImageBitmap方法.作用:获取图片的宽高,求出缩放极限值.

/*** 
   * 设置显示图片 
   */ 
  @Override 
  public void setImageBitmap(Bitmap bm) { 
    super.setImageBitmap(bm); 
    /** 获取图片宽高 **/ 
    bitmap_W = bm.getWidth(); 
    bitmap_H = bm.getHeight(); 
 
    MAX_W = bitmap_W * 3; 
    MAX_H = bitmap_H * 3; 
 
    MIN_W = bitmap_W / 2; 
    MIN_H = bitmap_H / 2; 
 
  }

接着我们在onLayout方法中我们获取最初的l,t,r,b.

@Override 
  protected void onLayout(boolean changed, int left, int top, int right, 
      int bottom) { 
    super.onLayout(changed, left, top, right, bottom); 
    if (start_Top == -1) { 
      start_Top = top; 
      start_Left = left; 
      start_Bottom = bottom; 
      start_Right = right; 
    } 
 
  } 

下面我们说下重点Touch方法.其实原来大家都明白,要说难的话估计就是逻辑实现了.