2016-10-22 8 views
1

シークバーの動作を変更してiOSシステムと似ていますが、y座標のseekbar rectからはシーク進捗が遅くなります。シークバーに戻ると、シークバーに触れるとシークバーのxスワイプ/プログレスバーの1/1の比率になります。Android - Seekbarカスタム進捗スケーリング

シークバー(y方向)が50ピクセル上にあるとすると、スケーリング係数は3/1となるはずです。x方向に3ピクセル離れたところを移動すると、シークバーは明らかにx軸のサインに合わせて1ピクセル移動する必要があります。要約すると、ipod music tracking seekbarや動画プレーヤー(AndroidのMXプレーヤーは私が探しているものと同じものを持っていると思う)のようなものです。

これを行う方法はありますか?

私が試したのは、seekbar.setOnTouchListenerをオーバーライドしていますが、ここから私はそのようなことをシミュレートするために何ができるか分かりません。私はseekbar.setOnSeekBarChangeListenerに関連すると思います...私はsetOnSeekBarChangeListener.OnProgressChangedメソッド内で見つけることができる同じ進行状況バーのジェスチャ検出と計算の間の "リンク"をオーバーライドできますか? seekbar.setScalingProgressFactorのような、y座標に依存してx軸に沿って3/1ピクセルの割合を課す方法がありますか?

私の質問がはっきりしていることを願っています。

ありがとうございます!あなたの活動のOnTouch、使用中

答えて

1

int x = event.getX(), y = event.getY(); 

次に、y座標をどのくらいかを確認を使用することです:

int distance = mySeekbarY - y; 
if (distance == 0) { 
    double ScalingFactor = 1; 
else { 
    double ScalingFactor = 50/(3*Math.abs(distance)); 
} 

クリックでは50px離れている場合には、距離になります50を式に差し込むと、必要に応じて50 /(3 * 50)= 1/3になります。距離が0の場合を処理するにはif-elseステートメントが必要でした。数式に0を差し込むと50/0が得られ、これはエラーになります。今度は:

double toMove = (x-mySeekbarX)*ScalingFactor; 

そして、あなたのシークバーのX座標にtoMoveを追加してください。 :D

私は助けました:D

+0

ありがとうございました!しかし、「シークバーのx座標」はどういう意味ですか?あなたは "seekbar.setProgress(toMove)"を使うことを提案しますか?愚かな質問を申し訳ありません::) – pippo

+1

@pippoまあ、シークバーの現在の進行状況を記録する変数を取得します。次に、それにtoMoveを追加し、それをProgressとして設定します。あなたが助けを必要とする場合は、尋ねてください! P.S.あなたは答えが満足できると思うなら、それを受け入れられたとマークし、それを投票するかもしれませんか? ; D – Rippr

+0

ありがとうございました。あなたは私の仕事の中で私を助けてくれました!だから、私はこの解決策を見つけました:あなたが示唆したように、私はsetOnTouchListenerをオーバーライドし、シークバービューでクリックすると私の位置を追跡しました。スケーリングファクタはあなたが書いたものと似ていますが、より滑らかにするためにちょっとした工夫をしました。私のevent.getX()を(seekbar.getWidth()/ seekbar.getMax())に分割して、 )そしてsetProgress(getProgress()+ toMove)を、私のseekbarのonTouchListenerの中に入れてください。すべてはすぐに行く!本当にありがとう!! :) – pippo

関連する問題