Exemplo n.º 1
0
  /**
   * 向下滑动让图片变大
   *
   * @param event
   * @return
   */
  public boolean onTouchEvent(MotionEvent event) {

    if (!isHaveHead) { // 无头部图片
      return super.onTouchEvent(event);
    }
    switch (event.getAction() & MotionEvent.ACTION_MASK) {
        // 手指压下屏幕
      case MotionEvent.ACTION_DOWN:
        if (isBacking) {
          return super.onTouchEvent(event);
        }
        int[] location = new int[2];
        imageView.getLocationInWindow(location);
        if (location[1] >= 0) {
          mode = MODE_DRAG;
          // 记录ImageView当前的移动位置
          currentMatrix.set(imageView.getImageMatrix());
          startPoint.set(event.getX(), event.getY());
        }
        break;
        // 手指在屏幕上移动,改事件会被不断触发
      case MotionEvent.ACTION_MOVE:
        // 拖拉图片
        if (mode == MODE_DRAG) {
          float dx = event.getX() - startPoint.x; // 得到x轴的移动距离
          float dy = event.getY() - startPoint.y; // 得到y轴的移动距离
          // 在没有移动之前的位置上进行移动
          if (dy / 2 + imgHeight <= 1.5 * imgHeight) {
            matrix.set(currentMatrix);
            float scale = (dy / 2 + imgHeight) / (imgHeight); // 得到缩放倍数
            if (dy > 0) {
              scaleY = dy;
              ListView.LayoutParams relativeLayout =
                  new ListView.LayoutParams((int) (scale * imgWidth), (int) (scale * imgHeight));
              imageView.setLayoutParams(relativeLayout);
              matrix.postScale(scale, scale, imgWidth / 2, 0);
              imageView.setImageMatrix(matrix);
            }
          }
        }
        break;
        // 手指离开屏幕
      case MotionEvent.ACTION_UP:
        // 当触点离开屏幕,图片还原
        mHandler.sendEmptyMessage(BACK_SCALE);
      case MotionEvent.ACTION_POINTER_UP:
        mode = 0;
        break;
    }

    return super.onTouchEvent(event);
  }
Exemplo n.º 2
0
  public void open(ImageView srcImageView) {

    if (animator.isRunning()) {
      return;
    }

    if (parentView == null) {
      parentView = (View) getParent();
      parentWidth = parentView.getWidth();
      parentHeight = parentView.getHeight();
      parentView.getLocationInWindow(parentLocation);
    }

    Drawable drawable = srcImageView.getDrawable();
    right = drawableOriginWidth = drawable.getIntrinsicWidth();
    bottom = drawableOriginHeight = drawable.getIntrinsicHeight();

    setImageDrawable(drawable);

    if (parentView.getWidth() / (float) drawableOriginWidth
        > parentView.getHeight() / (float) drawableOriginHeight)
      scaleDirection = VERTICAL; // 以垂直方向参考
    else scaleDirection = HORIZON;

    srcImageView.getLocationInWindow(srcLocation);
    beginLeft = srcLocation[0] - parentLocation[0];
    beginTop = srcLocation[1] - parentLocation[1];

    if (scaleDirection == VERTICAL) {
      finalTop = 0;
      finalLeft = (parentWidth - parentHeight * drawableOriginWidth / drawableOriginHeight) / 2;
    } else {
      finalTop =
          mWindowHeight / 2
              - mLocation[1]
              - parentWidth / drawableOriginWidth * drawableOriginHeight / 2;
      finalLeft = 0;
    }
    mIsOpen = true;
    mFirstAnimPlay = true;
    parentView.setVisibility(VISIBLE);
    animator.setFloatValues(0, 1);
    animator.start();
  }