2013-03-29 31 views
5

Tôi là người mới đến android, hãy giúp tôi, có khả năng thêm hành động vuốt trong chế độ xem cuộn dọc của màn hình hoạt động. , nhưng không nhận được ...Android - Làm thế nào có thể thêm cử chỉ vuốt ngang trong chế độ xem cuộn dọc như ứng dụng xung có chế độ xem màn hình

+0

bạn có nhận được câu trả lời? Tôi cũng phải đối mặt với cùng một vấn đề. Xin vui lòng giúp đỡ nếu bạn đã tìm ra – Jaguar

+0

@ Jaguar yeah .. !!, xem bên dưới câu trả lời. –

+0

Đây có phải là đặc biệt cho 'ListView', hoạt động của bạn mở rộng' ListActivity' – Jaguar

Trả lời

2

tôi chỉ chuyển đổi xem cuộn dọc để listview, tác phẩm của nó như một nét duyên dáng ... Nhờ omid nazifi and wwyt, cho u hơn có thể thấy liên kết này Gesture in listview android

public class MainActivity extends ListActivity { 

    private OnTouchListener gestureListener; 
    private GestureDetector gestureDetector; 

    private int REL_SWIPE_MIN_DISTANCE; 
    private int REL_SWIPE_MAX_OFF_PATH; 
    private int REL_SWIPE_THRESHOLD_VELOCITY; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     // As paiego pointed out, it's better to use density-aware measurements. 
     DisplayMetrics dm = getResources().getDisplayMetrics(); 
     REL_SWIPE_MIN_DISTANCE = (int)(1.0f * dm.densityDpi/160.0f + 0.5); 
     REL_SWIPE_MAX_OFF_PATH = (int)(250.0f * dm.densityDpi/160.0f + 0.5); 
     REL_SWIPE_THRESHOLD_VELOCITY = (int)(200.0f * dm.densityDpi/160.0f + 0.5); 

     ListView lv = getListView(); 
     lv.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, 
      m_Starbucks)); 

     final GestureDetector gestureDetector = new GestureDetector(new MyGestureDetector()); 
     View.OnTouchListener gestureListener = new View.OnTouchListener() { 
      public boolean onTouch(View v, MotionEvent event) { 
       return gestureDetector.onTouchEvent(event); 
      }}; 
     lv.setOnTouchListener(gestureListener); 

     // Long-click still works in the usual way. 
     lv.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { 
      public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) { 
       String str = MessageFormat.format("Item long clicked = {0,number}", position); 
       Toast.makeText(MainActivity.this, str, Toast.LENGTH_SHORT).show(); 
       return true; 
      } 
     }); 

     /*lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, 
        long id) { 
       String str = MessageFormat.format("Item @extra clicked = {0,number}", position); 
       Toast.makeText(MainActivity.this, str, Toast.LENGTH_SHORT).show(); 
      } 
     });*/ 
    } 

    // Do not use LitView.setOnItemClickListener(). Instead, I override 
    // SimpleOnGestureListener.onSingleTapUp() method, and it will call to this method when 
    // it detects a tap-up event. 
    private void myOnItemClick(int position, View v) { 
     String str = MessageFormat.format("Item clicked = {0,number}", position); 
     Toast.makeText(this, str, Toast.LENGTH_SHORT).show(); 
    } 

    private void onLTRFling() { 
     Toast.makeText(this, "Left-to-right fling", Toast.LENGTH_SHORT).show(); 
    } 

    private void onRTLFling() { 
     Toast.makeText(this, "Right-to-left fling", Toast.LENGTH_SHORT).show(); 
    } 

    class MyGestureDetector extends SimpleOnGestureListener{ 

     // Detect a single-click and call my own handler. 
     @Override 
     public boolean onSingleTapUp(MotionEvent e) { 
      View lv = (View)getListView(); 
      int pos = ((AbsListView) lv).pointToPosition((int)e.getX(), (int)e.getY()); 
      myOnItemClick(pos,lv); 
      return false; 
     } 

     @Override 
     public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { 
      if (Math.abs(e1.getY() - e2.getY()) > REL_SWIPE_MAX_OFF_PATH) 
       return false; 
      if(e1.getX() - e2.getX() > REL_SWIPE_MIN_DISTANCE && 
       Math.abs(velocityX) > REL_SWIPE_THRESHOLD_VELOCITY) { 
       onRTLFling(); 
      } else if (e2.getX() - e1.getX() > REL_SWIPE_MIN_DISTANCE && 
       Math.abs(velocityX) > REL_SWIPE_THRESHOLD_VELOCITY) { 
       onLTRFling(); 
      } 
      return false; 
     } 

    } 

    private static final String[] m_Starbucks = { 
     "Latte", "Cappuccino", "Caramel Macchiato", "Americano", "Mocha", "White Mocha", 
     "Mocha Valencia", "Cinnamon Spice Mocha", "Toffee Nut Latte", "Espresso", 
     "Espresso Macchiato", "Espresso Con Panna" 
    }; 

} 
Các vấn đề liên quan