Android可扩展列表和;添加双击手势,如何添加监听器?

时间:2012-03-16 19:16:28

标签: android expandablelistview

我的程序创建了可扩展的列表,我已经实现了滑动 - 但我无法弄清楚如何添加双击。

首先,我有list= getExpandableListView();

在我的主类中,我使用以下代码实现了滑动:

final ActivitySwipeDetector swipeDetector = new ActivitySwipeDetector();


         list.setOnTouchListener(swipeDetector);

         list.setOnItemClickListener(new OnItemClickListener() {

                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                        if (swipeDetector.swipeDetected()){
                            // do the onSwipe action 
                        } else {
                            // do the onItemClick action
                        }
                    }
                                });


            list.setOnItemLongClickListener(new OnItemLongClickListener() {
                public boolean onItemLongClick(AdapterView<?> parent, View view,int position, long id) {
                    if (swipeDetector.swipeDetected()){
                        // do the onSwipe action
                        return true;
                    } else {
                        // do the onItemLongClick action
                        return false;
                    }
                }
            });

我做了一个类是我的Swipe探测器:

public class ActivitySwipeDetector implements View.OnTouchListener {

public static enum Action {
    LR, // Left to Right
    RL, // Right to Left
    TB, // Top to bottom
    BT, // Bottom to Top
    None // when no action was detected
}


private static final String logTag = "SwipeDetector";
private static final int MIN_DISTANCE = 100;
private float downX, downY, upX, upY;
private Action mSwipeDetected = Action.None;


public boolean swipeDetected(){
    return mSwipeDetected != Action.None;
}

public Action getAction(){
    return mSwipeDetected;
}



public boolean onTouch(View v, MotionEvent event) {
    switch (event.getAction()) {
    case MotionEvent.ACTION_DOWN: {
        downX = event.getX();
        downY = event.getY();
        mSwipeDetected = Action.None;
        return false; // allow other events like Click to be processed
    }
    case MotionEvent.ACTION_UP: {
        upX = event.getX();
        upY = event.getY();

        float deltaX = downX - upX;
        float deltaY = downY - upY;

        // horizontal swipe detection
                if (Math.abs(deltaX) > MIN_DISTANCE) {
                    // left or right
                    if (deltaX < 0) {
                        Log.i(logTag, "Swipe Left to Right");
                        mSwipeDetected = Action.LR;
                        return false;
                    }
                    if (deltaX > 0) {
                        Log.i(logTag, "Swipe Right to Left");
                        mSwipeDetected = Action.RL;
                        return false;
                    }
                } else 

                // vertical swipe detection
                if (Math.abs(deltaY) > MIN_DISTANCE) {
                    // top or down
                    if (deltaY < 0) {
                        Log.i(logTag, "Swipe Top to Bottom");
                        mSwipeDetected = Action.TB;
                        return false;
                    }
                    if (deltaY > 0) {
                        Log.i(logTag, "Swipe Bottom to Top");
                        mSwipeDetected = Action.BT;
                        return false;
                    }
                } 
                return false;
    }
    }
    return false;
}

}

我要添加什么才能让程序检测到Double Taps? 我试图将以下内容添加到我的滑动类中:

 public boolean onDoubleTap(MotionEvent e) {
    float x = e.getX();
    float y = e.getY();

    Log.d("Double Tap", "Tapped at: (" + x + "," + y + ")");

    return true;
}

但我不确定如何在主类中添加监听器..

这只是给了我“list.setOnDoubleTapListener”和“new onDoubleTapListener”的错误..

list.setOnDoubleTapListener(new OnDoubleTapListener(){ 
                public boolean onDoubleTap(MotionEvent e) { 

                     return false; 
                } 
                public boolean onDoubleTapEvent(MotionEvent e) { 
                    // viewA.setText("-" + "onDoubleTapEvent" + "-"); 
                     return false; 
                } 
                public boolean onSingleTapConfirmed(MotionEvent e) { 
                     //viewA.setText("-" + "onSingleTapConfirmed" + "-"); 
                     return false; 
                } 

         });

请帮助

ž。

1 个答案:

答案 0 :(得分:1)

解决上述问题:

在滑动检测器类中添加了以下内容:private static final int MIN_DISTANCE = 100; private float downX, downY, upX, upY; private Action mSwipeDetected = Action.None; private long lastTouchTime = -1;

将此添加到ActionDown

 case MotionEvent.ACTION_DOWN: {

        downX = event.getX();
        downY = event.getY();
        mSwipeDetected = Action.None;


        long thisTime = System.currentTimeMillis();

        if (thisTime - lastTouchTime < 250) {

           // Double click
         //  p = mapView.getProjection().fromPixels((int) e.getX(), (int) e.getY());
           lastTouchTime = -1;
           Log.i(logTag, "DOUBLE TAP");
        } else {
           // too slow
           lastTouchTime = thisTime;
        }


         return false; // allow other events like Click to be processed

    }