提供兩種實現 ImageView 手勢縮放拖拽的方案:
imageView.setScaleType(ScaleType.MATRIX);
imageView.setOnTouchListener(new MultiTouchListener());
核心邏輯:ACTION_DOWN 記錄起始點進入拖拽模式,ACTION_POINTER_DOWN 計算雙指距離進入縮放模式,ACTION_MOVE 根據模式調用 matrix.postTranslate 或 postScale 更新矩陣,最後 setImageMatrix 刷新顯示。需處理邊界限制防止圖片移出可視區。
封裝 ScaleGestureDetector 處理縮放手勢,onTouchEvent 處理拖拽,onMeasure 自適應居中。使用更簡單:
TouchImageView img = findViewById(R.id.img);
img.setImageResource(R.drawable.bigpic);
img.setMaxZoom(4f);
兩種方案均基于 Matrix 實現平移縮放,方案二封裝度更高,推薦生產環境使用。注意在 XML 中設置 android:scaleType="matrix"。