/** * 向下滑动让图片变大 * * @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); }
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(); }