Cập nhật: Tôi đã tìm ra những gì đang xảy ra. Xem ý kiến.ScaleGestureDetector.OnScaleGestureListener.onScaleEnd() phương pháp không được nhấn
Tôi đang cố gắng viết một ViewSwitcher chuyển tất cả cử chỉ cho đứa con đầu tiên cho đến khi nó nhận được cử chỉ quy mô; sau đó chuyển chúng cho đứa con thứ hai cho đến khi đứa trẻ đó được thu nhỏ lại hoàn toàn, khi nó trở lại đứa con đầu tiên. lớp con của tôi có một ScaleGestureDetector và tôi đã nghe rất đơn giản:
protected class OnScaleModeSwitcher implements ScaleGestureDetector.OnScaleGestureListener
{
protected PageFlipSwitcher owner;
public OnScaleModeSwitcher(PageFlipSwitcher newOwner)
{
super();
owner = newOwner;
}
@Override
public boolean onScale(ScaleGestureDetector detector) {
return false;
}
@Override
public boolean onScaleBegin(ScaleGestureDetector detector) {
owner.onScaleBegin();
//returning false here causes the rest of the gesture to be ignored.
return false;
}
@Override
public void onScaleEnd(ScaleGestureDetector detector) {
owner.onScaleEnd();
}
}
Như bạn có thể xem tất cả nó làm là lấy một tham chiếu đến đối tượng chủ sở hữu trên xây dựng, sau đó vượt qua một số sự kiện với các phương pháp trong lớp chủ sở hữu. Tuy nhiên, onScaleEnd() không được mã lệnh truy cập.
Tôi biết rằng onInterceptTouchEvent có thể hơi dicey một chút; Tôi làm theo các gợi ý trong tài liệu Android cho nó càng sát càng tốt và có
@Override
public boolean onInterceptTouchEvent(MotionEvent ev)
{
onTouchEvent(ev);
return false;
}
@Override
public boolean onTouchEvent(MotionEvent ev)
{
//mode is the name of the ScaleGestureDetector
mode.onTouchEvent(ev);
//this code just passes events to the children
//it seems to work OK
if(zoomActive)
{
//ZoomSwitcher
getChildAt(1).onTouchEvent(ev);
}
else
{
//Gallery
getChildAt(0).onTouchEvent(ev);
}
return true;
}
Tôi đọc ở đâu khác mà một GestureDetector thể không nhận được sự kiện ACTION_UP:
Android: How to detect when a scroll has ended
Là những gì là xảy ra ở đây? Nếu vậy thì điểm của phương thức onScaleEnd() là gì?
EDIT:
Tôi đã làm việc này: đó là do phương pháp của tôi trả về false. Eclipse tự động triển khai một số phần khai báo và tôi không thay đổi các giá trị trả về khi tôi điền chúng vào.