2010-09-26 53 views
9

Tôi đang cố triển khai hình động cuộn cho thư viện theo chương trình.Cách cuộn hoạt ảnh theo chương trình

Đã thử với setSelection(int pos, Boolean animate) và không hoạt động.

Có cách nào để ghi đè phương pháp setSelection() không.

Trả lời

6

Gallery.setSelection (vị trí int, boolean animate);

Tham khảo bên dưới URL: http://groups.google.com/group/android-developers/browse_thread/thread/9140fd6af3061cdf/7f89e53ae53e455b?lnk=gst&q=setselection#7f89e53ae53e455b

soln: Nếu bạn vẫn đang tìm kiếm, tôi có hai giải pháp khả thi cho bạn, cả hai hơi khó chịu:

(1) Bạn có thể làm cho bộ sưu tập làm một chuyến đi với vận tốc đã chọn, do đó:

myGallery.onFling (null, null, velocity, 0);

Bằng cách tinh chỉnh vận tốc, bạn có thể thiết lập giá trị để di chuyển lựa chọn bằng một hoặc hai trong hai hướng. Với tư cách là Trung tâm tự lưu trữ, bạn thực hiện không cần phải nhận đích chính xác.

(2) Khi nguồn thư viện khả dụng, bạn có thể sửa đổi nó để triển khai Thư viện của riêng bạn. Có vẻ như bạn không cần thêm nhiều mã để có thể kiểm soát một lần thoát để kết thúc tại lựa chọn bạn đã chọn.

Tôi nghĩ mình sẽ phải làm (2), nhưng thấy rằng tôi có thể lấy đi với (1) cho vấn đề của tôi.

+0

Phương thức (1) hoạt động tuyệt vời, chỉ cần đảm bảo bạn sử dụng một vận tốc đủ lớn. Xấu hổ các tài liệu Android ở đây rất gây hiểu lầm: "Thông báo về sự kiện chạy trốn khi nó xảy ra" là IMHO không chính xác, nên nói điều gì đó như: "Yêu cầu Thư viện thực hiện một chuyến đi" hoặc phương pháp được gọi là performFling – pheelicks

2

Tôi đã xem qua nguồn Thư viện để xem liệu tôi có thể có được tính năng này hay không. Có vẻ như có điều gì đó có thể với mã này. Tuy nhiên tôi đã từ bỏ trước khi tôi có thể làm cho nó hoạt động. Có vẻ như tôi đã không đi qua các tọa độ chính xác nên res luôn trả về false. Sẽ trả về true nếu nó hoạt động.

Chỉ cần đăng bài đăng tại đây trong trường hợp người khác muốn cố gắng khắc phục sự cố! (Vui lòng đăng giải pháp của bạn nếu bạn quản lý!)

Rect rect = new Rect(); 
gallery.getHitRect(rect); 


int x = rect.centerX()+getWindowManager().getDefaultDisplay().getWidth(); 
int y = rect.centerY(); 

MotionEvent event = MotionEvent.obtain(100, 100, MotionEvent.ACTION_DOWN, x, y, 0); 
timesGallery.onDown(event); 
boolean res = timesGallery.onSingleTapUp(null); 
2

Tôi đã thực hiện một chút thay đổi về mã do "Kurru" đưa ra. hiện đang hoạt động tại

Rect rect = new Rect(); 
    gallery.getHitRect(rect); 

    int width = Math.abs(rect.width()); 
    if(!isForwardScroll){ 
     width = width * -1; 
    } 
    int x = rect.centerX()+width/2; 
    int y = rect.centerY(); 

    MotionEvent event = MotionEvent.obtain(100, 100, MotionEvent.ACTION_DOWN, x, y, 0); 
    gallery.onDown(event); 
    boolean res = gallery.onSingleTapUp(null); 
+0

bạn có thể cung cấp thêm mã hay không hoặc ví dụ?cảm ơn bạn – pengwang

6

Dựa trên suy nghĩ tuyệt vời của Kurru về mô phỏng nhấp vào lần xem tiếp theo hoặc trước đó.

//scroll forward or backward 
private void scroll(int type){ 
    View selectedV = mG.getSelectedView(); 
    int idx = mG.indexOfChild(selectedV); 
    switch(type){ 
     case FORWARD: 
    default: 
     if(idx<mG.getChildCount()-1) 
      idx++; 
     break; 
    case BACKWARD: 
     if(idx>0) 
      idx--;   
     break; 
    } 
    //now scrolled view's child idx in gallery is gotten 
    View nextView = mG.getChildAt(idx); 
    //(x,y) in scrolled view is gotten 
    int x = nextView.getLeft()+nextView.getWidth()/2; 
    int y = nextView.getTop()+nextView.getHeight()/2; 
    String out = String.format("x=%d, y=%d", x, y); 
    Log.i(TAG+".scroll", out); 

    //Kurru's simulating clicking view 
    MotionEvent event = MotionEvent.obtain(100, 100, MotionEvent.ACTION_DOWN, x, y, 0); 
    mG.onDown(event); 
    boolean res = mG.onSingleTapUp(null); 
    Log.i(TAG+".scroll", "onSingleTapUp return =" + res);  
} 
12

Bây giờ tôi đã gặp sự cố này. Tôi đã cần phải di chuyển chỉ là một yếu tố của bộ sưu tập, vì vậy giải pháp tốt nhất đối với tôi là để bắt chước sự kiện phím

myGallery.onKeyDown(KeyEvent.KEYCODE_DPAD_RIGHT, null); 

hoặc

myGallery.onKeyDown(KeyEvent.KEYCODE_DPAD_LEFT, null); 
Các vấn đề liên quan