1

私のアプリケーションでは、ボタンやボタンとして機能する他のビューに簡単なアニメーションを追加したいと思います。

これを行うには、カスタムonTouchListenerをすべてのビューに設定し、それらに対してstartAnimationを呼び出します。

私のonTouchメソッドは次のようになります。

public boolean onTouch(View v, MotionEvent event) {

    // Only show animation when enabled.
    if (v.isEnabled()) {
        switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
            v.startAnimation(shrink);
            break;
        case MotionEvent.ACTION_UP:
            v.startAnimation(grow);
            break;
        }
    }
    return v.onTouchEvent(event);
}

これは、ユーザーがボタンを押している間にビューのサイズが小さくなり、ユーザーが指を離すと元のサイズに戻るため、問題なく機能します。

ただし、何らかの理由で、タッチしたボタンの近くにある他のボタンもUPイベントを取得するため、小さなアニメーションのちらつきも発生します。

なぜこれが、そしてもっと重要なことに、この迷惑な行動を防ぐにはどうすればよいですか?

編集:明確にするために。ネイバービューも同じリスナーインスタンスに登録されていますが、指で触れられていません。

4

2 に答える 2

0

問題は、複数のビューで同じアニメーションインスタンスを使用することでした。ビューごとに個別のインスタンスを作成すると、問題が修正されました。

于 2012-06-27T06:37:37.203 に答える
0

リスナーを登録したビューは、通知を受け取るだけで、次の方法も使用する必要があります。

ビューのIDを明示的に確認してから、アニメーションのみを開始できます。

public boolean onTouch(View v, MotionEvent event) {

    if (v.getId() == R.id.desired_view_id) {
        // Only show animation when enabled.
        if (v.isEnabled()) {
            switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                v.startAnimation(shrink);
                break;
            case MotionEvent.ACTION_UP:
                v.startAnimation(grow);
                break;
            }
        }
    }
    return v.onTouchEvent(event);
}
于 2012-06-26T14:56:54.410 に答える