【Android】图片点击放大放小
📖Android图片点击放大放小
- ✅1.触摸缩放
- ✅2.缩放移动中心
✅1.触摸缩放
通过触摸事件获取触摸的坐标,并将其通过动画放大缩小即可实现:
这里的holder.photo_id换成图片组件即可。
private boolean isScale=false;
holder.photo_id.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent event) {
ImageView imageView = holder.photo_id;
float x = event.getX();
float y = event.getY();
float pivotX = x ;
float pivotY = y;
if (!isScale){
// 设置缩放中心
imageView.setPivotX(pivotX);
imageView.setPivotY(pivotY);
// 开始放大动画
imageView.animate()
.scaleX(3.5f)
.scaleY(3.5f)
.setDuration(300)
.start();
isScale=true;
}else {
// 设置缩放中心
imageView.setPivotX(pivotX);
imageView.setPivotY(pivotY);
// 开始缩小动画
imageView.animate()
.scaleX(1f)
.scaleY(1f)
.setDuration(300)
.start();
isScale=false;
}
return false;
}
});
✅2.缩放移动中心
这种需求就是能触摸想看的地方,放大到中心位置,可以更直观的看清,主要改变的地方:
- 通过withEndAction动画结束事件,进行几次偏移
- 还原时将偏移量从0开始即可
private boolean isScale=false;
holder.photo_id.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent event) {
ImageView imageView = holder.photo_id;
float x = event.getX();
float y = event.getY();
float pivotX = x ;
float pivotY = y;
if (!isScale){
// 设置缩放中心
imageView.setPivotX(pivotX);
imageView.setPivotY(pivotY);
// 开始放大动画
imageView.animate()
.scaleX(3.5f)
.scaleY(3.5f)
.setDuration(300)
.withEndAction(new Runnable() {
@Override
public void run() {
//移动偏移量计算
float x1 = x - imageView.getPaddingLeft();
float y1 = y - imageView.getPaddingTop();
float x2 = imageView.getWidth() / 2 - x1;
float y2 = imageView.getHeight() / 2 - y1;
imageView.setTranslationX(x2);
imageView.setTranslationY(y2);
}
})
.start();
isScale=true;
}else {
// 设置缩放中心
imageView.setPivotX(pivotX);
imageView.setPivotY(pivotY);
// 开始放大动画
imageView.animate()
.translationX(0) // 重置translationX
.translationY(0) // 重置translationY
.scaleX(1f)
.scaleY(1f)
.setDuration(300)
.start();
isScale=false;
}
return false;
}
});