Androidでまったく同じものを開発したとき、これを実装するための有用な例/記事も見つからなかったので、次のようにしました。
ユーザーが画面に触れてフリング/スワイプ(画面上で指を動かして画面から離す)を行うと、speedXとspeedYをピクセル/秒で計算します(AndroidではonFling(float velocitY、float velocitX)メソッドがあります))。
次に、ピクセル/秒単位の速度を回転/秒に変換します。これは、ユーザーが指で触れた場合、1秒間に1500ピクセル移動すると、ホイールがX回回転することを意味します。たとえば、フリング/スワイプのspeedXとspeedYが1500 px / sで、ホイールの半径が150 pxの場合、次のようにホイールの弧の長さを計算します。
arc = r * PI. (r=150)
次に、次のように1秒あたりの回転数で速度を計算します。
spinSpeed = Math.sqrt((speedX*speedX)+(speedY*speedY))/arc)*360
速度が決まったら、次のようにTミリ秒(私は40ミリ秒を使用)ごとにホイールの回転角度を変更できます。
wheel.angle += spinSpeed;
また、ドラッグを実装する必要があるため、ホイールは最終的に次のように遅くなります。
spinSpeed -= drag_value;
wheel.angle += spinSpeed;
drag_valueを目的の効果(速度が低下する速度)に調整する必要があります。また、spinSpeedに定数を掛けて、より高速にすることもできます(私は40を使用しました)。
この実装には、ユーザーの指に続くホイールは含まれていません。これを行うには、画面を最後にタッチしてからユーザーの指がどれだけ移動したかを計算する必要があります(X座標とY座標の場合)。したがって、2つの座標(lastTouchX、lastTouchY、newTouchX、newTouchY)が必要です。座標がある場合は、この座標を通る線の傾きまたは勾配を計算できます(この式では、傾き/勾配はKです:y = kx + n-標準の線の式)。次に、この2つの線の交点を計算し、それをホイールに適用する必要があります。このようなもの:
tg = ((k1-k2)/(1+(k1*k2))); // k1 is the slope of the previous touch coordinate; k2 is the slope of the current touch coordinates
angle = Math.toDegrees(Math.atan(Math.abs(tg)));
wheel.angle += angle; // to implement spinning in the other way use wheel.angle -= angle;
あなたがアイデアを得ることを願っています