2015-05-12 2 views
2

Я работаю над Android ListView. Я реализовал pull для обновления через XListView, но теперь я также хочу реализовать Swipe Left to right, чтобы показать кнопки List Item в этом ListView. Как мне это сделать? Или Как добавить 2 библиотеки как в ListView.Android ListView Потяните, чтобы обновить и перетащить элемент списка, чтобы открыть кнопки

Мой ListView в XML есть.

<com.orderlyexpo.www.listview.refresh.XListView 
     android:id="@+id/lvOrders" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:divider="@color/gray_text" 
     android:dividerHeight="@dimen/dp1x" /> 

ответ

2

Не используйте lib для прокрутки, создайте свой собственный вид, и вы можете использовать Pull для обновления той же самой библиотеки.

Просто сделайте это так.

Добавить название класса.

SwipeDetector.java

public class SwipeDetector 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_MOVE: { 
     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) { 
      //  Logger.show(Log.INFO,logTag, "Swipe Left to Right"); 
       mSwipeDetected = Action.LR; 
       return true; 
      } 
      if (deltaX > 0) { 
      //  Logger.show(Log.INFO,logTag, "Swipe Right to Left"); 
       mSwipeDetected = Action.RL; 
       return true; 
      } 
     } else 

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

И затем вызвать его из ListView или элемента onClickListner Mathod. Я вызвал его из ItemClick из baseadapter.

convertView.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      if(swipeDetector.swipeDetected()) { 
      if(swipeDetector.getAction() == Action.LR) { 
       viewHolder.chatButton.setVisibility(View.VISIBLE); 
       //outterLayout 
       RelativeLayout.LayoutParams relativeParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); 
       relativeParams.addRule(RelativeLayout.RIGHT_OF, viewHolder.chatButton.getId()); 
       relativeParams.setMargins(20, 0, 0, 0); 
       viewHolder.outterLayout.setLayoutParams(relativeParams); 
       viewHolder.tvDeliver.setVisibility(View.GONE); 
       return; 
      } else { 
       viewHolder.chatButton.setVisibility(View.GONE); 
       RelativeLayout.LayoutParams relativeParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); 
       relativeParams.setMargins(0, 0, 0, 0); 
       viewHolder.outterLayout.setLayoutParams(relativeParams); 
       return; 
      } 
     } 
      Toast.makeText(context, "Click", 2000).show();   
     } 
    }); 
+0

я назвал swipedetector.java от listview.setOnItemClickListener но не обнаружить мою салфетку .. –

0

Вы можете использовать Navigation Drawe г Или есть XListView внутри ViewPager - где на странице (фрагмент) будет иметь XListView и другие ваши кнопки.

5

@Override общественного логический onInterceptTouchEvent (MotionEvent эв) { INT действие = MotionEventCompat.getActionMasked (эв); final float x = ev.getX(); final float y = ev.getY();

if (isEnabled() && touchListener.isSwipeEnabled()) { 

     if (touchState == TOUCH_STATE_SCROLLING_X) { 
      return touchListener.onTouch(this, ev); 
     } 

     switch (action) { 
      case MotionEvent.ACTION_MOVE: 
       checkInMoving(x, y); 
       return touchState == TOUCH_STATE_SCROLLING_Y; 
      case MotionEvent.ACTION_DOWN: 
       super.onInterceptTouchEvent(ev); 
       touchListener.onTouch(this, ev); 
       touchState = TOUCH_STATE_REST; 
       lastMotionX = x; 
       lastMotionY = y; 
       return false; 
      case MotionEvent.ACTION_CANCEL: 
       touchState = TOUCH_STATE_REST; 
       break; 
      case MotionEvent.ACTION_UP: 
       touchListener.onTouch(this, ev); 
       return touchState == TOUCH_STATE_SCROLLING_Y; 
      default: 
       break; 
     } 
    } 

    return super.onInterceptTouchEvent(ev); 
} 

/** 
* Check if the user is moving the cell 
* 
* @param x Position X 
* @param y Position Y 
*/ 
private void checkInMoving(float x, float y) { 
    final int xDiff = (int) Math.abs(x - lastMotionX); 
    final int yDiff = (int) Math.abs(y - lastMotionY); 

    final int touchSlop = this.touchSlop; 
    boolean xMoved = xDiff > touchSlop; 
    boolean yMoved = yDiff > touchSlop; 

    if (xMoved) { 
     touchState = TOUCH_STATE_SCROLLING_X; 
     lastMotionX = x; 
     lastMotionY = y; 
    } 

    if (yMoved) { 
     touchState = TOUCH_STATE_SCROLLING_Y; 
     lastMotionX = x; 
     lastMotionY = y; 
    } 
} 

Use this library

Смежные вопросы