Android单点触控技术,对图片进行平移,缩放,旋转操作
时间: 2024-05-03 18:18:25 浏览: 9
Android提供了多点触控的支持,可以实现图片的平移、缩放、旋转等操作。下面简单介绍一下单点触控实现图片操作的方法。
1. 平移操作
平移操作可以通过监听手指在屏幕上的移动来实现。在ImageView上监听ACTION_MOVE事件,根据手指移动的距离,更新图片的位置即可。
示例代码:
```java
imageView.setOnTouchListener(new View.OnTouchListener() {
private float lastX, lastY;
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
lastX = event.getX();
lastY = event.getY();
break;
case MotionEvent.ACTION_MOVE:
float moveX = event.getX() - lastX;
float moveY = event.getY() - lastY;
imageView.scrollBy(-(int) moveX, -(int) moveY);
lastX = event.getX();
lastY = event.getY();
break;
}
return true;
}
});
```
2. 缩放操作
缩放操作可以通过手势缩放来实现。在ImageView上监听ACTION_MOVE事件,根据手势的缩放比例,更新图片的大小即可。
示例代码:
```java
imageView.setOnTouchListener(new View.OnTouchListener() {
private float lastX, lastY;
private float scale = 1f;
private float minScale = 0.5f;
private float maxScale = 2f;
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN:
lastX = event.getX();
lastY = event.getY();
break;
case MotionEvent.ACTION_MOVE:
if (event.getPointerCount() == 2) {
float distance = getDistance(event);
float diffScale = distance / lastDistance;
scale *= diffScale;
if (scale < minScale) {
scale = minScale;
}
if (scale > maxScale) {
scale = maxScale;
}
imageView.setScaleX(scale);
imageView.setScaleY(scale);
lastDistance = distance;
} else {
float moveX = event.getX() - lastX;
float moveY = event.getY() - lastY;
imageView.scrollBy(-(int) moveX, -(int) moveY);
lastX = event.getX();
lastY = event.getY();
}
break;
case MotionEvent.ACTION_POINTER_DOWN:
lastDistance = getDistance(event);
break;
}
return true;
}
private float lastDistance;
private float getDistance(MotionEvent event) {
float dx = event.getX(1) - event.getX(0);
float dy = event.getY(1) - event.getY(0);
return (float) Math.sqrt(dx * dx + dy * dy);
}
});
```
3. 旋转操作
旋转操作可以通过手势旋转来实现。在ImageView上监听ACTION_MOVE事件,根据手势旋转的角度,更新图片的旋转角度即可。
示例代码:
```java
imageView.setOnTouchListener(new View.OnTouchListener() {
private float lastX, lastY;
private float rotation = 0f;
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN:
lastX = event.getX();
lastY = event.getY();
break;
case MotionEvent.ACTION_MOVE:
if (event.getPointerCount() == 2) {
float angle = getRotation(event);
rotation += angle;
imageView.setRotation(rotation);
} else {
float moveX = event.getX() - lastX;
float moveY = event.getY() - lastY;
imageView.scrollBy(-(int) moveX, -(int) moveY);
lastX = event.getX();
lastY = event.getY();
}
break;
case MotionEvent.ACTION_POINTER_DOWN:
lastAngle = getAngle(event);
break;
}
return true;
}
private float lastAngle;
private float getAngle(MotionEvent event) {
float dx = event.getX(1) - event.getX(0);
float dy = event.getY(1) - event.getY(0);
return (float) Math.toDegrees(Math.atan2(dy, dx));
}
private float getRotation(MotionEvent event) {
float angle = getAngle(event);
float diffAngle = angle - lastAngle;
lastAngle = angle;
return diffAngle;
}
});
```
以上就是Android单点触控实现图片平移、缩放、旋转的方法。当然,还有更复杂的多点触控实现方式,可以满足更高级的交互需求。