android 图片实现平移 伸缩 双指控制伸缩大小
时间: 2023-12-06 09:05:15 浏览: 32
要实现 Android 中图片的平移和伸缩,您可以使用 GestureDetector 和 ScaleGestureDetector 类。
首先,您需要创建一个 ImageView 对象,并在其中加载您想要显示的图片。然后,您可以为 ImageView 添加一个 OnTouchListener,并在 onTouch 方法中检测手势事件。
在 onTouch 方法中,您可以通过 GestureDetector 来检测单指的滑动手势,从而实现图片的平移。您可以在每次滑动结束后,通过 ImageView 的 setImageMatrix 方法来更新图片的位置。
同时,您可以使用 ScaleGestureDetector 来检测双指的缩放手势,并通过 Matrix 的 postScale 方法来实现图片的伸缩。在缩放过程中,您可以通过 ScaleGestureDetector 的 getCurrentSpan 方法来获取当前手指间的距离,并通过计算缩放前后的比例来确定缩放大小。
最后,您需要在每次缩放或平移结束后,通过 ImageView 的 setImageMatrix 方法来更新图片的位置和大小。
以下是一个示例代码,可以帮助您更好地理解如何实现图片的平移和伸缩:
```
public class MainActivity extends AppCompatActivity implements OnTouchListener, GestureDetector.OnGestureListener, ScaleGestureDetector.OnScaleGestureListener {
private ImageView mImageView;
private GestureDetector mGestureDetector;
private ScaleGestureDetector mScaleGestureDetector;
private Matrix mMatrix = new Matrix();
private float mScaleFactor = 1.0f;
private float mLastX, mLastY;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mImageView = findViewById(R.id.imageView);
mImageView.setOnTouchListener(this);
mGestureDetector = new GestureDetector(this, this);
mScaleGestureDetector = new ScaleGestureDetector(this, this);
}
@Override
public boolean onTouch(View v, MotionEvent event) {
mGestureDetector.onTouchEvent(event);
mScaleGestureDetector.onTouchEvent(event);
return true;
}
@Override
public boolean onDown(MotionEvent e) {
return true;
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
return true;
}
@Override
public void onLongPress(MotionEvent e) {
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
float moveX = e2.getX() - mLastX;
float moveY = e2.getY() - mLastY;
mMatrix.postTranslate(-moveX, -moveY);
mImageView.setImageMatrix(mMatrix);
mLastX = e2.getX();
mLastY = e2.getY();
return true;
}
@Override
public void onShowPress(MotionEvent e) {
}
@Override
public boolean onSingleTapUp(MotionEvent e) {
return true;
}
@Override
public boolean onScale(ScaleGestureDetector detector) {
mScaleFactor *= detector.getScaleFactor();
mScaleFactor = Math.max(0.1f, Math.min(mScaleFactor, 10.0f));
mMatrix.setScale(mScaleFactor, mScaleFactor);
mImageView.setImageMatrix(mMatrix);
return true;
}
@Override
public boolean onScaleBegin(ScaleGestureDetector detector) {
return true;
}
@Override
public void onScaleEnd(ScaleGestureDetector detector) {
}
}
```
希望这个示例代码可以帮助您实现图片的平移和伸缩。