双指缩放实例(同事写的,不是转载也不是原创)

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<meta content="width=device-width initial-scale=1.0 maximum-scale=1.0 user-scalable=0" name="viewport"/>
<title>手指</title>
<style>
.bg-model{position:fixed;width:100%;height:100%;background:rgba(0,0,0,0.5);}
.rect{position:absolute;width:60px;height:60px;border:1px dashed #f00}
.resize{position:absolute;width: 30px;height: 30px;bottom: -15px;right: -15px;background: rgb(163, 146, 54)
}
</style>
</head>
<body>
<div class="bg-model" id="div1">
<div class="rect" id="div2" style="top:10px;left:10px;width: 60px;">
<p id="DebugTXT"></p>
<div class="resize" id="div3"></div>
</div>
</div>
<script>
var d1=document.getElementById('div1'),d2=document.getElementById('div2') ,d3=document.getElementById('div3');
var Moving,Resizing;
var startX,startY,sideLen=60;
d1.addEventListener('touchstart',touchStart,true);
d1.addEventListener('touchmove',touchMove,true);
d1.addEventListener('touchend',touchEnd,true);

var twoFinger;
var pos1={x:0,y:0},pos2={x:0,y:0};
var pos12={x:0,y:0},pos22={x:0,y:0};
function touchStart(e){
var el = e.target;
DebugTXT.innerHTML='touch:'+e.touches.length+'<br>changeTouch:'+e.changedTouches.length+'<br>'+twoFinger;
if(e.touches.length==2){
twoFinger=true;
pos1.x=e.touches[0].clientX; pos1.y=e.touches[0].clientY;
pos2.x=e.touches[1].clientX; pos2.y=e.touches[1].clientY;
return;
}else{twoFinger=false;}

var touch= e.touches[0];
if (el.id == 'div2') {
Moving = true;
Resizing = false;
startX=touch.clientX-parseInt(d2.style.left);
startY=touch.clientY-parseInt(d2.style.top);
} else if (el.id == 'div3') {
Moving = false;
Resizing = true; sideLen=parseInt(d2.style.width);
startX=touch.clientX;
startY=touch.clientY;
d3.style.display='none';
}twoFinger=false;
}
function touchMove(e){
DebugTXT.innerHTML='touch:'+e.touches.length+'<br>changeTouch:'+e.changedTouches.length+'<br>'+twoFinger;
e.stopPropagation();
e.preventDefault();
if (e.changedTouches.length == 2) {
twoFinger = true;
pos12.x = e.changedTouches[0].clientX;
pos12.y = e.changedTouches[0].clientY;
pos22.x = e.changedTouches[1].clientX;
pos22.y = e.changedTouches[1].clientY;
return;
}
var touch = e.changedTouches[0];
if (Moving) {
var endX = touch.clientX, endY = touch.clientY;
d2.style.left = endX - startX + 'px';
d2.style.top = endY - startY + 'px';
} else if (Resizing) {
var endX = touch.clientX, endY = touch.clientY;
var increase = Math.min(endX - startX, endY - startY);
d2.style.width = sideLen + increase + 'px';
d2.style.height = sideLen + increase + 'px';
}
}

function touchEnd(e){
DebugTXT.innerHTML='touch:'+e.touches.length+'<br>changeTouch:'+e.changedTouches.length+'<br>'+twoFinger;
if(e.touches.length==0&&twoFinger){
twoFinger=false;
var len1=Math.pow(Math.pow(pos1.x-pos2.x,2)+Math.pow(pos1.y-pos2.y,2),0.5).toFixed(0);
var len2=Math.pow(Math.pow(pos12.x-pos22.x,2)+Math.pow(pos12.y-pos22.y,2),0.5).toFixed(0);
//alert('len1:'+len1+',len2:'+len2);
var newL=len2-len1>0?1.5:0.5;
sideLen=parseInt(d2.style.width);
d2.style.width =d2.style.height =sideLen*newL+ 'px';

}
Moving=Resizing=false; d3.style.display='block';
}

</script>
</body>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现Android上的图片单指滑动和双指缩放功能,可以使用GestureDetector和ScaleGestureDetector两个类。具体步骤如下: 1. 在布局文件中添加一个ImageView,用于显示图片。 2. 在Activity中实例化GestureDetector和ScaleGestureDetector,并重相应的回调方法。 ```java public class MainActivity extends AppCompatActivity implements GestureDetector.OnGestureListener, GestureDetector.OnDoubleTapListener, ScaleGestureDetector.OnScaleGestureListener { private ImageView imageView; private GestureDetector gestureDetector; private ScaleGestureDetector scaleGestureDetector; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); imageView = findViewById(R.id.imageView); gestureDetector = new GestureDetector(this, this); gestureDetector.setOnDoubleTapListener(this); scaleGestureDetector = new ScaleGestureDetector(this, this); } @Override public boolean onTouchEvent(MotionEvent event) { gestureDetector.onTouchEvent(event); scaleGestureDetector.onTouchEvent(event); return true; } @Override public boolean onDown(MotionEvent e) { return true; } @Override public void onShowPress(MotionEvent e) { } @Override public boolean onSingleTapUp(MotionEvent e) { return true; } @Override public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { // 单指滑动 if (e2.getPointerCount() == 1) { float dx = e2.getX() - e1.getX(); float dy = e2.getY() - e1.getY(); imageView.scrollBy((int) dx, (int) dy); return true; } return false; } @Override public void onLongPress(MotionEvent e) { } @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { return true; } @Override public boolean onSingleTapConfirmed(MotionEvent e) { return true; } @Override public boolean onDoubleTap(MotionEvent e) { // 双击缩放 float scale = imageView.getScaleX(); if (scale == 1.0f) { imageView.setScaleX(2.0f); imageView.setScaleY(2.0f); } else { imageView.setScaleX(1.0f); imageView.setScaleY(1.0f); } return true; } @Override public boolean onDoubleTapEvent(MotionEvent e) { return true; } @Override public boolean onScale(ScaleGestureDetector detector) { // 双指缩放 float scaleFactor = detector.getScaleFactor(); float scale = imageView.getScaleX(); if (scaleFactor * scale >= 1.0f && scaleFactor * scale <= 3.0f) { imageView.setScaleX(scaleFactor * scale); imageView.setScaleY(scaleFactor * scale); } return true; } @Override public boolean onScaleBegin(ScaleGestureDetector detector) { return true; } @Override public void onScaleEnd(ScaleGestureDetector detector) { } } ``` 3. 在onTouchEvent方法中分别调用GestureDetector和ScaleGestureDetector的onTouchEvent方法。 4. 在重的onScroll方法中,通过判断触摸点的数量来实现单指滑动。 5. 在重的onDoubleTap方法中,通过判断当前的缩放比例来实现双击缩放。 6. 在重的onScale方法中,通过ScaleGestureDetector获取缩放比例来实现双指缩放。 以上就是Android上实现图片单指滑动和双指缩放功能的最优法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值