To do this from scratch, you would need a way to transform your touch coordinates, into polar coordinates (to have the rotation angle). This can be done easily like this:
private float cartesianToPolar(float x, float y) {
return (float) -Math.toDegrees(Math.atan2(x - 0.5f, y - 0.5f));
}
To rotate the imageview, or the element you are using to display your knob, you can use a matrix like this:
Matrix matrix=new Matrix();
ivRotor.setScaleType(ScaleType.MATRIX);
matrix.postRotate((float) deg, m_nWidth/2, m_nHeight/2);//getWidth()/2, getHeight()/2);
ivRotor.setImageMatrix(matrix);
Where deg is the angle and ivRobor is the knob imageview.
A complete working sample for Android, is available on Google code at: https://code.google.com/p/android-rotaryknob-view/
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…