4

私の問題は、ListView でアイテムをドラッグしようとすると、常に ACTION_DOWN イベントが発生するとは限らないことです。多くの ACTION_MOVE イベントと 1 つの ACTION_UP イベントのみを取得しました。いつもそうであるとは限りません。ACTION_DOWN を 3 回受けました。それは私を混乱させました。

同様の質問を見ましたが、その答えは私のものには合わないようです。なぜこれが起こっているのか誰にも考えられますか?

ありがとう

//list_client  --  a listview
list_client.setOnTouchListener(new View.OnTouchListener() {
    float f1 = -1, f2 = -1 ;
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        switch(event.getAction()){
            case MotionEvent.ACTION_DOWN: 
                f1 = event.getRawY();
                    break;
            case MotionEvent.ACTION_MOVE:
                f2 = event.getRawY();
                if(f2 - f1 > 50){
                    if(View.VISIBLE != rl_search_and_add.getVisbility() &&  ){  rl_search_and_add.setVisibility(View.VISIBLE);
                }
                f1 = f2;
                }else if (f2 - f1 < -50){
                    rl_search_and_add.setVisibility(View.GONE);
                    f1 = f2;
                }
                break; 
            case MotionEvent.ACTION_UP:
                f1 = -1; f2 = -1;
                break; 
        }
        return false;
    }
});
4

2 に答える 2

0

次のように onInterceptTouchEvent をオーバーライドする必要があります。

@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
    switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
            yDown = event.getRawY();
            break;
        default:
            break;
    }
    return super.onInterceptTouchEvent(event);
}

次に、プログラムに yDown を使用します

于 2016-10-25T07:49:13.867 に答える