Tôi có Hoạt động chứa ViewFlipper. ViewFlipper bao gồm 2 bố cục, cả hai đều chỉ là ListView.Sự cố khi phát hiện cử chỉ trên ListView
Vì vậy, ý tưởng ở đây là tôi có hai danh sách và để điều hướng từ danh sách này sang danh sách khác, tôi sẽ sử dụng vuốt ngang.
Tôi làm việc đó. Tuy nhiên, những gì bao giờ danh sách mục ngón tay của bạn là trên khi swipe bắt đầu thực hiện, mục đó cũng sẽ được dài nhấp.
Đây là mã có liên quan tôi có:
public class MyActivity extends Activity implements OnItemClickListener, OnClickListener {
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 mGestureDetector;
View.OnTouchListener mGestureListener;
class MyGestureDetector extends SimpleOnGestureListener {
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
try {
if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH)
return false;
// right to left swipe
if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
if (mCurrentScreen != SCREEN_SECONDLIST) {
mCurrentScreen = SCREEN_SECONDLIST;
mFlipper.setInAnimation(inFromRightAnimation());
mFlipper.setOutAnimation(outToLeftAnimation());
mFlipper.showNext();
updateNavigationBar();
}
}
else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
if (mCurrentScreen != SCREEN_FIRSTLIST) {
mCurrentScreen = SCREEN_FIRSTLIST;
mFlipper.setInAnimation(inFromLeftAnimation());
mFlipper.setOutAnimation(outToRightAnimation());
mFlipper.showPrevious();
updateNavigationBar();
}
}
} catch (Exception e) {
// nothing
}
return true;
}
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (mGestureDetector.onTouchEvent(event))
return true;
else
return false;
}
ViewFlipper mFlipper;
private int mCurrentScreen = SCREEN_FIRSTLIST;
private ListView mList1;
private ListView mList2;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.layout_flipper);
mFlipper = (ViewFlipper) findViewById(R.id.flipper);
mGestureDetector = new GestureDetector(new MyGestureDetector());
mGestureListener = new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
if (mGestureDetector.onTouchEvent(event)) {
return true;
}
return false;
}
};
// set up List1 screen
mList1List = (ListView)findViewById(R.id.list1);
mList1List.setOnItemClickListener(this);
mList1List.setOnTouchListener(mGestureListener);
// set up List2 screen
mList2List = (ListView)findViewById(R.id.list2);
mList2List.setOnItemClickListener(this);
mList2List.setOnTouchListener(mGestureListener);
}
…
}
Nếu tôi thay đổi "return true;" tuyên bố từ GestureDetector để "trả về false", tôi không nhận được nhấp chuột dài. Thật không may, tôi nhận được các nhấp chuột thông thường.
Có ai biết cách tôi có thể giải quyết vấn đề này không?
Điều này tương tự như một thành phần mà tôi đã phát triển gần đây, ngoại trừ việc tôi thêm chế độ xem tái chế vào mỏ và được hỗ trợ bởi một listAdapter. Về cơ bản, tôi kanged một loạt các ListView mã và đính kèm nó vào một tùy chỉnh cử chỉ hướng HorizontalScrollView như bạn đã làm. – jfelectron
Vâng, tôi cũng đang làm việc để thêm vào SwipeView! Ngoài ra, tôi chỉ (nghĩa đen chỉ, khoảng 2 phút trước) nhận thấy rằng có một lỗi với ListViews trên một SwipeView. Bây giờ tôi đã sửa lỗi và cập nhật git repo. https://github.com/fry15/uk.co.jasonfry.android.tools – jsonfry
jfelectron là của bạn trên GIThub? –