Android 多點觸控(放大 縮小 旋轉 位移)

2021-07-29 02:49:36 字數 2216 閱讀 3418

通過多點觸控實現的放大、縮小、旋轉、位移效果。

private float oldx1 = 0;

private float oldx2 = 0;

private float oldy1 = 0;

private float oldy2 = 0;

private float oldrotation= 0;

private boolean isdrag = true;

private float downx = 0;

private float downy = 0;

@override

public boolean ontouchevent(motionevent event) else if (nowdifferentx - olddifferentx < 0 && nowdifferenty - olddifferenty < 0)

/*** rotation當前旋轉角度

*///判斷旋轉

float nowrotation = rotation(event);

float rotation = nowrotation - oldrotation;

matrix.postrotate(rotation, convertcenterx(), convertcentery());// 旋轉

oldx1 = event.getx(0);

oldx2 = event.getx(1);

oldrotation += rotation;

}else if (isdrag)

invalidate();

break;

case motionevent.action_up:

if (event.getpointercount() == 1)

}break;

}return true;

}

優化版:旋轉和放大操作同時只能響應乙個,旋轉放大原點基於手指位置計算

@override

public boolean ontouchevent(motionevent event)

}if (isscale && !isrotate) else if (!isscale && isrotate) else if (isrotate)

oldx1 = event.getx(0);

oldx2 = event.getx(1);

oldy1 = event.gety(0);

oldy2 = event.gety(1);

} else if (isdrag)

invalidate();

break;

case motionevent.action_up:

if (event.getpointercount() == 1)

isdrag = true;

}break;

}return true;

}/**

* @param ischange 是否需要改變檢視

* @return 是否進行了放大縮小操作

*/private boolean scale(motionevent event, boolean ischange)

return true;

} else if (changex < 0 && changey < 0)

return true;

}return false;

}private boolean rotate(motionevent event, boolean ischange)

return true;

} else return false;

}// 取旋轉角度

private float rotation(motionevent event)

放大計算方法:

當判斷多指觸控時,記錄下當前兩指的座標點,在move事件觸發後,計算當前兩指之間的距離和兩指位置改變之前的距離,並進行比較,若距離變大則為放大,若距離縮小則為縮小。

旋轉計算方法:

// 取旋轉角度

private float rotation(motionevent event)

通過以上方法獲得當前兩指形成的角度值,在判斷多指觸控時記錄下初始角度,當觸發move事件後重新計算角度值,其差值即為旋轉了的角度。

WPF多點觸控放大縮小旋轉

原文 wpf多點觸控放大縮小旋轉 如果要方法縮小乙個canvas,或 只要在控制項中新增 就可以拉伸改控制項。如果在canvas中新增該行為則可拉伸canvas中所有控制項。translatefriction是移動摩擦力,rotationalfriction是旋轉摩擦力。eipic.supporte...

android 多點觸控

下面是一些常用的函式解釋 copy過來滴.event.getaction 獲取觸控動作比如action down event.getpointercount 獲取觸控點的數量,比如2則可能是兩個手指同時按壓螢幕 event.getpointerid nid 對於每個觸控的點的細節,我們可以通過乙個迴...

關於android多點觸控

最近專案需要乙個多點觸控縮放的功能。然後上網查了下資料 總結一下 首先android sdk版本很重要,比如你在androidmanifest.xml中指定android minsdkversion 4 並且建工程的時候選的是android 2.2就表示你的應用相容android1.6 androi...