मैं एक समाधान पर फिर से काम किया है और अंत में यह उसी तरह यह जीमेल पर किया गया है लागू करने के लिए एक बहुत ही सरल रास्ता मिल गया है इसके किनारों के। फिर अगली स्क्रॉलिंग पर, पूरा पृष्ठ स्क्रॉल होगा।
स्क्रॉल दिशा बनाम किनारों की जांच करने के लिए यह सब आवश्यक है क्षैतिज स्क्रॉल दृश्य को ओवरराइड करना और यह भी सुनिश्चित करना कि सामग्री वास्तव में स्क्रॉल कर सकती है।
@Override
public boolean onTouchEvent(MotionEvent ev)
{
if (no_scrolling)
return false;
// Standard behavior
//
return super.onTouchEvent(ev);
}
boolean no_scrolling = false;
float old_x, old_y;
@Override
public boolean onInterceptTouchEvent(MotionEvent ev)
{
int action = ev.getActionMasked();
Log.d(at_data.TAG, "HSV scroll intercept: " + String.format("0x%08x", action));
if (action == MotionEvent.ACTION_DOWN)
{
old_x = ev.getX();
old_y = ev.getY();
no_scrolling = false;
}
else if (action == MotionEvent.ACTION_MOVE)
{
float dx = ev.getX() - old_x;
float dy = ev.getY() - old_y;
if (Math.abs(dx) > Math.abs(dy) && dx != 0)
{
View hsvChild = getChildAt(0);
int childW = hsvChild.getWidth();
int W = getWidth();
Log.d(at_data.TAG, "HSV " + childW + " > " + W + " ? dx = " + dx + " dy = " + dy);
if (childW > W)
{
int scrollx = getScrollX();
if ((dx < 0 && scrollx + W >= childW) || (dx > 0 && scrollx <= 0))
{
Log.d(at_data.TAG, "HSV Wider: on edge already");
no_scrolling = true;
return false;
}
else
{
Log.d(at_data.TAG, "HSV Wider: can scroll");
no_scrolling = false;
}
}
else
{
Log.d(at_data.TAG, "HSV cannot scroll in desired direction");
no_scrolling = true;
}
}
}
// Standard behavior
//
return super.onInterceptTouchEvent(ev);
}
घड़ी [इस] (http://stackoverflow.com/questions/7774642/scroll-webview-horizontally-inside-a-viewpager) जवाब। लेकिन उस उत्तर में कस्टम वेबव्यू के बजाय, आपको अपने क्षैतिज स्क्रॉलिंग व्यू को विस्तारित करने की आवश्यकता हो सकती है। – grine4ka