2011-12-21 26 views
6

के अंदर देखें मेरे पास क्षैतिज स्क्रॉलिंग पृष्ठ हैं जैसे एंड्रॉइड मार्केट (ViewPager) में।क्षैतिज स्क्रॉल व्यू ViewPager

मेरी समस्या यह है कि मैं कुछ छवियों के साथ क्षैतिज स्क्रॉलिंग दृश्य देखना चाहता हूं? क्या यह संभव है ??

अब तक, मुझे अपने विचार में थोड़ा स्क्रॉल मिल रहा है और फिर पूरा पृष्ठ स्क्रॉल कर रहा है।

आपके समय के लिए धन्यवाद!

+0

घड़ी [इस] (http://stackoverflow.com/questions/7774642/scroll-webview-horizontally-inside-a-viewpager) जवाब। लेकिन उस उत्तर में कस्टम वेबव्यू के बजाय, आपको अपने क्षैतिज स्क्रॉलिंग व्यू को विस्तारित करने की आवश्यकता हो सकती है। – grine4ka

उत्तर

0
<Linearlayout> 
    <linearlayout> 
     <scrollView> 
      <ImageView1></ImageView> 
      <ImageView2></....> 
     </scrollView> 
    </Linearlayout> 
    <EditText> 
</Linearlayout> 

उपरोक्त मामले में, scrollVIew केवल दो छवियों के लिए लागू है, जो संपादन के लिए नहीं हैं।

अन्य मामले में:

<Linearlayout> 
    <linearlayout> 
     <scrollView> 
      here listVIew with Images using listView adapter 
     </scrollView> 
    </Linearlayout> 
    <EditText> 
</Linearlayout> 

यहाँ scrollview केवल ListView लिए लागू है।

18

आपको HorizontalScrollView और टच ईवेंट को अवरुद्ध करने की आवश्यकता है। क्या मेरे लिए काम किया निम्न नमूना था:

public class MyScrollView extends HorizontalScrollView { 

    public MyScrollView(Context p_context, AttributeSet p_attrs) 
    { 
     super(p_context, p_attrs); 
    } 

    @Override 
    public boolean onInterceptTouchEvent(MotionEvent p_event) 
    { 
     return true; 
    } 

    @Override 
    public boolean onTouchEvent(MotionEvent p_event) 
    { 
     if (p_event.getAction() == MotionEvent.ACTION_MOVE && getParent() != null) 
     { 
      getParent().requestDisallowInterceptTouchEvent(true); 
     } 

     return super.onTouchEvent(p_event); 
    } 
} 

फिर, बजाय अपने लेआउट एक्सएमएल में HorizontalScrollView का उपयोग करने का, तो आप इस कस्टम दृश्य का उपयोग करने की आवश्यकता है। जब तक यह पहुंचता है HorizontalScrollView स्क्रॉल करेगा:

क्या मुझे इस समाधान के लिए मिल में मदद की this post

+0

यह मेरे लिए काम करता है, अन्य समाधान नहीं करते हैं! लेकिन ऐसा लगता है कि यह आपके कस्टम स्क्रॉलव्यू के अंदर बटन पर क्लिक हैंडलिंग अक्षम करता है। कोई उपाय? – user1365836

+0

@ user1365836 हाँ ... यह थोड़ा गन्दा हो सकता है ... मैंने जो किया वह GetHitRect का उपयोग कर रहा था और दबाए गए सटीक बटन को ढूंढ रहा था और फिर उसे ऑनक्लिक फ़ंक्शन – Muzikant

+6

पर कॉल करना यदि आप केवल एक चीज करना चाहते हैं तो स्क्रॉलिंग की अनुमति दें लेकिन फिर भी उपयोगकर्ता के अंदर तत्वों को क्लिक करने के लिए, आपको बस इंटरेप्ट टचएवेंट() पर अंदर से सबकुछ नियंत्रित करना होगा। https://gist.github.com/brandondenney/b8ddd655664eb295129d – Brandon

1

मैं एक समाधान पर फिर से काम किया है और अंत में यह उसी तरह यह जीमेल पर किया गया है लागू करने के लिए एक बहुत ही सरल रास्ता मिल गया है इसके किनारों के। फिर अगली स्क्रॉलिंग पर, पूरा पृष्ठ स्क्रॉल होगा।

स्क्रॉल दिशा बनाम किनारों की जांच करने के लिए यह सब आवश्यक है क्षैतिज स्क्रॉल दृश्य को ओवरराइड करना और यह भी सुनिश्चित करना कि सामग्री वास्तव में स्क्रॉल कर सकती है।

@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); 
} 
संबंधित मुद्दे