热门标签 | HotTags
当前位置:  开发笔记 > Android > 正文

Android实现ImageView图片双击放大及缩小

这篇文章主要介绍了Android实现ImageView图片双击放大及缩小的相关资料,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例介绍了Android实现ImageView图片双击放大及缩小的相关技巧,分享给大家供大家参考,具体内容如下

public class DoubleScaleImageView extends ImageView implements OnTouchListener, OnGlobalLayoutListener {
  private boolean isFirst = false;
  private float doubleScale;// 双击放大的值
  private Matrix mScaleMatrix;
  private float defaultScale;// 默认的缩放值
  private int mLastPinterCount;// 记录上一次多点触控的数量
  private float mLastX;
  private float mLastY;
  private int mTouchSlop;
  private boolean isCanDrag;
  private boolean isCheckLeft;
  private boolean isCheckTop;
  private GestureDetector mGestureDetector;
  public DoubleScaleImageView(Context context) {
    this(context, null);
  }
  public DoubleScaleImageView(Context context, AttributeSet attrs) {
    this(context, attrs, 0);
  }
  @SuppressLint("ClickableViewAccessibility")
  public DoubleScaleImageView(Context context, AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
    mScaleMatrix = new Matrix();
    setScaleType(ScaleType.MATRIX);
    setOnTouchListener(this);
    // getScaledTouchSlop是一个距离,表示滑动的时候,手的移动要大于这个距离才开始移动控件。如果小于这个距离就不触发移动控件
    mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop();
    mGestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() {
      @Override
      public boolean onDoubleTap(MotionEvent e) {
        float x = e.getX();
        float y = e.getY();
        if (getScale()  width && imageHeight  height) {
        scale = height * 1.0f / imageHeight;
      }
      // 如果图片的宽度都 大于或小于控件宽度,我们则要对图片进行对应缩放,保证图片占满控件
      if ((imageWidth > width && imageHeight > height) || (imageWidth  0 && isCheckTop) {
      delY = -rectf.top;
    }
    if (rectf.bottom  0 && isCheckLeft) {
      delX = -rectf.left;
    }
    if (rectf.right  mTouchSlop;
  }
  /**
   * 获取图片的位置
   * @description:
   * @date 2016-1-8 上午9:02:10
   */
  private RectF getMatrixRectf() {
    Matrix matrix = mScaleMatrix;
    RectF recft = new RectF();
    if (getDrawable() != null) {
      recft.set(0, 0, getDrawable().getIntrinsicWidth(), getDrawable().getIntrinsicHeight());
      matrix.mapRect(recft);
    }
    return recft;
  }

  // 获取当前图片的缩放值
  private float getScale() {
    float values[] = new float[9];
    mScaleMatrix.getValues(values);
    return values[Matrix.MSCALE_X];
  }
}

以上就是安卓实现ImageView图片双击放大及缩小的全部代码,希望对大家的学习有所帮助。


推荐阅读
author-avatar
逃跑的骨拉拉gf_761
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有