Gallery에서 ScrollView 슬라이딩 이벤트 충돌 해결

2302 단어
Gallery 아래에서 안의 내용이 화면보다 너무 길다. 이때 우리는 ScrollView로 굴릴 수 있다. 그러나 이렇게 한 후에 문제를 발견할 수 있다. Gallery의 미끄럼 사건과 ScrollView의 미끄럼 사건이 충돌한다. 이때 우리는 Gallery 컨트롤을 사용자 정의하여 이 문제를 피할 수 있다.
import android.content.Context;  
import android.util.AttributeSet;  
import android.view.KeyEvent;  
import android.view.MotionEvent;  
import android.widget.Gallery;  
  
public class TestGallery extends Gallery {  
    private float gTouchStartX;  
    private float gTouchStartY;  
  
    public TestGallery(Context context, AttributeSet attrs, int defStyle) {  
        super(context, attrs, defStyle);  
    }  
  
    public TestGallery(Context context, AttributeSet attrs) {  
        super(context, attrs);  
    }  
  
    public TestGallery(Context context) {  
        super(context);  
    }  
      
    @Override  
    public boolean onInterceptTouchEvent(MotionEvent ev) {  
        int action = ev.getAction();  
        switch(action){  
        case MotionEvent.ACTION_DOWN:  
            gTouchStartX = ev.getX();  
            gTouchStartY = ev.getY();  
            super.onTouchEvent(ev);  
            break;  
        case MotionEvent.ACTION_MOVE:  
            final float touchDistancesX = Math.abs(ev.getX()-gTouchStartX);  
            final float touchDistancesY = Math.abs(ev.getY()-gTouchStartY);  
            if(touchDistancesY *2 >= touchDistancesX){  
                return false;  
            }else{  
                return true;  
            }  
        case MotionEvent.ACTION_CANCEL:  
            break;  
        case MotionEvent.ACTION_UP:  
            break;  
        }  
        return false;  
    }  
      
    @Override  
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,  
            float velocityY) {  
        if(e2.getX() > e1.getX()){  
            onKeyDown(KeyEvent.KEYCODE_DPAD_LEFT, null);  
        }else{  
            onKeyDown(KeyEvent.KEYCODE_DPAD_RIGHT, null);  
        }  
        return false;  
    }  
  
}

좋은 웹페이지 즐겨찾기