2012-04-12 38 views
17

Tôi là lập trình viên n00b và cần rất nhiều trợ giúp.Android: vuốt màn hình để mở một hoạt động khác?

Chỉ cần cho mục đích hướng dẫn, tôi muốn làm cho hệ thực vật đơn giản & động vật (cây & động vật) Bách khoa toàn thư

Tôi muốn làm cho màn hình chủ của tôi kéo có thể giống như màn hình chủ của Android. Vuốt sang phải để mở trang Nhà máy và vuốt sang trái để mở trang Động vật. Tôi không biết cách tạo hiệu ứng chuyển tiếp . Vì vậy, chúng tôi có thể kéo nó nửa chừng để xem những gì ở trang tiếp theo và chỉ cần kéo lại để hủy bỏ nó

Các bạn có thể chia sẻ liên kết để tạo màn hình có thể kéo không?

Cảm ơn trước

[Chỉnh sửa]

@Agarwal Tôi đã thử các mã từ Link2 của bạn và nó không làm việc

tôi cố gắng để kiểm tra xem những cử chỉ phát hiện hay không bằng cách đặt Toast bên trong lớp bên trong nhưng Bánh mì nướng không được hiển thị. Link1 về cơ bản là giống nhau.

và từ vẻ của mã này, tôi nghĩ rằng nó không thể làm cho màn hình của tôi kéo có thể giống như trong màn hình chủ Android của

mã của tôi:

public class Home extends Activity implements OnClickListener { 
    private GestureDetector gestureDetector; 
    View.OnTouchListener gestureListener; 
    ImageButton flora, fauna; 
    Intent go; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    initialize(); 

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

private void initialize() { 
    //find view by id to image button 
    //set onClickListener to image button 
} 

public void onClick(View v) { 
    //normal switch and case for each button 

} 

private void onLeftSwipe() { 
    Toast t = Toast.makeText(Home.this, "Left swipe", Toast.LENGTH_LONG); 
    t.show(); 
    go = new Intent("test.apps.FLORA"); 
    startActivity(go); 
} 

private void onRightSwipe() { 
    Toast t = Toast.makeText(Home.this, "Right swipe", Toast.LENGTH_LONG); 
    t.show(); 
    go = new Intent("test.apps.FAUNA"); 
    startActivity(go); 
} 

private class SwipeGestureDetector extends SimpleOnGestureListener { 
    private static final int SWIPE_MIN_DISTANCE = 50; 
    private static final int SWIPE_MAX_OFF_PATH = 200; 
    private static final int SWIPE_THRESHOLD_VELOCITY = 200; 

    @Override 
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, 
      float velocityY) { 
     try { 
      Toast t = Toast.makeText(Home.this, "Gesture detected", Toast.LENGTH_SHORT); 
      t.show(); 
      float diffAbs = Math.abs(e1.getY() - e2.getY()); 
      float diff = e1.getX() - e2.getX(); 

      if (diffAbs > SWIPE_MAX_OFF_PATH) 
       return false; 

      // Left swipe 
      if (diff > SWIPE_MIN_DISTANCE 
        && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { 
       Home.this.onLeftSwipe(); 
      } 
      // Right swipe 
      else if (-diff > SWIPE_MIN_DISTANCE 
        && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { 
       Home.this.onRightSwipe(); 
      } 
     } catch (Exception e) { 
      Log.e("Home", "Error on gestures"); 
     } 
     return false; 
    } 

} 
} 
+0

Hey, câu hỏi nhanh chóng. Bạn đã bao giờ tìm ra lý do tại sao link2 không hoạt động? Tôi đang cố gắng làm cho nó hoạt động tốt. Nhưng bây giờ tôi không có may mắn như vậy. – Andy

+0

Có, tôi đã tìm thấy mã nguồn tốt cho màn hình có thể kéo này, đây là liên kết http://marcreichelt.blogspot.sg/2010/09/android-use-realviewswitcher-to-switch.html?m=1 – hrsetyono

+0

@DarcCode link bị hỏng, đây là liên kết thay thế [web.archive.org/web/2....](http://web.archive.org/web/20120728070120/http://marcreichelt.blogspot.sg/2010/09 /android-use-realviewswitcher-to-switch.html) – Olumide

Trả lời

14

Tôi nhận ra đây là một câu hỏi cũ nhưng đối với bất cứ ai khác tự hỏi tại sao mã trên không hoạt động, đó là vì anh ta đã không đặt OnTouchListener thành đối tượng View. Đây là lý do tại sao "sự kiện" vuốt của anh ta không được chọn, bởi vì không có gì đang lắng nghe nó.

Ông có thể thêm dòng này để thiết lập swipes vào nút hình ảnh của mình (mặc dù có thể bạn sẽ muốn có một Xem đối tượng tốt hơn sau đó này):

flora.setOnTouchListener(gestureListener); 
+1

Cảm ơn bạn đã va chạm, tìm thấy điều này qua google. Đang cố gắng làm điều tương tự trong ứng dụng của tôi. Càng nhiều thông tin càng tốt. –

+0

Tôi đã tìm thấy một giải pháp thay thế khác, nhưng câu trả lời này sẽ giải quyết được câu hỏi của tôi, Cảm ơn. – hrsetyono

-4

Sử dụng các chức năng Ý định vào đây để đi đến hoạt động tiếp theo trên cử chỉ nghe

Nó sẽ b

0

Android Hoạt động Swipe Detection

Tạo Một hoạt động lớp cơ sở

public abstract class _SwipeActivityClass extends AppCompatActivity 
{ 
    private static final int SWIPE_MIN_DISTANCE = 120; 
    private static final int SWIPE_MAX_OFF_PATH = 250; 
    private static final int SWIPE_THRESHOLD_VELOCITY = 200; 
    private GestureDetector gestureDetector; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     gestureDetector = new GestureDetector(this, new SwipeDetector()); 
    } 

    protected abstract void onSwipeRight(); 
    protected abstract void onSwipeLeft(); 

    public class SwipeDetector extends GestureDetector.SimpleOnGestureListener 
    { 
     @Override 
     public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) 
     { 

      // Check movement along the Y-axis. If it exceeds SWIPE_MAX_OFF_PATH, 
      // then dismiss the swipe. 
      if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH) 
      { 
       return false; 
      } 

      //toast("start = "+String.valueOf(e1.getX())+" | end = "+String.valueOf(e2.getX()) ); 
      //from left to right 
      if(e2.getX() > e1.getX()) 
      { 
       if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) 
       { 
        onSwipeRight(); 
        return true; 
       } 
      } 

      if(e1.getX() > e2.getX()) 
      { 
       if (e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) 
       { 
        onSwipeLeft(); 
        return true; 
       } 
      } 

      return false; 
     } 
    } 

    @Override 
    public boolean dispatchTouchEvent(MotionEvent ev) 
    { 
     // TouchEvent dispatcher. 
     if (gestureDetector != null) 
     { 
      if (gestureDetector.onTouchEvent(ev)) 
      // If the gestureDetector handles the event, a swipe has been 
      // executed and no more needs to be done. 
      return true; 
     } 

     return super.dispatchTouchEvent(ev); 
    } 

    @Override 
    public boolean onTouchEvent(MotionEvent event) 
    { 
     return gestureDetector.onTouchEvent(event); 
    } 
} 

Sau đó, mở rộng bạn MainActivity từ _SwipeActivityClass

phương pháp thực hiện, onSwipeLeft()onSwipeRight() để bắt đầu một hoạt động

SOURCE HERE

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