2011-10-06 11 views
5

मैं नीचे दिखाए गए लेआउट का उपयोग कर क्षैतिजस्कोलव्यू का उपयोग करके स्क्रोल करने योग्य क्षैतिज मेनू बनाने की कोशिश कर रहा हूं। मेनू पिछले/अगले तीर बटन या फ़्लिंग पर स्क्रॉल करने योग्य है। जब क्षैतिज स्क्रॉलव्यू एक छोर तक पहुंचता है तो मैं उसी छोर पर तीर छुपा होना चाहता हूं (नीचे दिखाए गए चित्र में मैं बायां तीर छुपा होना चाहता हूं)।क्षैतिज स्क्रॉलव्यू तीरों के साथ

मैं कैसे पता लगा सकता हूं कि क्षैतिज स्क्रॉलव्यू समाप्त हो गया है?

धन्यवाद

enter image description here

<RelativeLayout android:background="@drawable/bg_home_menu" 
    android:layout_width="fill_parent" android:layout_height="45dp"> 
    <ImageView android:id="@+id/previous" android:src="@drawable/arrow_l" 
     android:layout_height="14dp" android:layout_width="10dp" 
     android:layout_alignParentLeft="true" 
     android:layout_centerVertical="true" /> 

    <ImageView android:id="@+id/next" android:src="@drawable/arrow_r" 
     android:layout_height="14dp" android:layout_width="10dp" 
     android:layout_alignParentRight="true" 
     android:layout_centerVertical="true" /> 

    <HorizontalScrollView android:id="@+id/horizontalScroll" 
     android:layout_width="fill_parent" android:layout_height="fill_parent" 
     android:scrollbars="none" android:fadingEdgeLength="30dp" android:layout_toLeftOf="@id/next" 
     android:layout_toRightOf="@id/previous" > 

     <LinearLayout android:id="@+id/home_menu" 
      android:orientation="horizontal" android:layout_width="wrap_content" 
      android:layout_height="fill_parent" android:gravity="center_vertical"> 

      <Button android:id="@+id/btn_home" android:background="@drawable/btn_home_menu_on" 
       android:layout_height="35dp" android:layout_width="wrap_content" android:focusable="true" 
       android_clickable="false" android:text="@string/menu_home" android:textColor="#FFFFFF" android:tag="-1"/> 

      <!-- More are added dynamically --> 

     </LinearLayout> 

    </HorizontalScrollView> 
</RelativeLayout> 

उत्तर

3

LinearLayout उपयोग की getScrollX() में इस कोड डाल अंदर 0 हो जाएगा स्क्रीन पर कोने। यदि यह 0 है, तो बायां तीर अक्षम किया जाना चाहिए।

दायां तीर के लिए, drawing rectangle की चौड़ाई को पुनर्प्राप्त करें, getScrollX() जोड़ें और getMeasuredWidth() पर तुलना करें, यदि यह वही है, तो आप सही हैं, दाएं तीर की आवश्यकता नहीं है।

तो अपने कोड इस तरह दिखेगा:

if (homeMenu.getScrollX()==0) { 
    hideLeftArrow(); 
} else { 
    showLeftArrow(); 
} 
if (homeMenu.getDrawingRect().right == homeMenu.getMeasuredWidth()) { 
    hideRightArrow(); 
} else { 
    showRightArrow(); 
} 

बेशक आप एक घटना श्रोता में इस डाल करने के लिए होगा। मैं केवल ऊपर की जांच करने के लिए ओवरराइट की गई ऑनस्क्रॉल() विधि के साथ अपने स्वयं के क्षैतिजस्कोल दृश्य वर्ग का उपयोग करने के बारे में सोच सकता हूं, this post देखें।

4

वहाँ HorizontalScrollView के लिए कोई पुस्तक श्रोता है। आप क्या कर सकते हैं यह एक ऑन टचलिस्टर को जोड़ता है जब उपयोगकर्ता स्क्रॉल करता है तो यह लगातार आग लग जाएगा, और प्रत्येक बार जब आप विधि का उपयोग कर सकते हैं तो स्क्रॉलएक्स जो int देता है।

अब 0 का मतलब सबसे अधिक है (सही स्क्रॉल राशि) को खोजने के लिए, आपको क्षैतिज स्क्रॉल व्यू के बच्चे के दृश्य की चौड़ाई को खोजने की आवश्यकता है। यही कारण है कि addOnGlobalLayoutListener किसी और चौड़ाई का उपयोग करके पाया जाता है हमेशा onCreate विधि

निर्धारित करने के लिए जो सबसे बाईं ओर है अपने स्क्रोलर अंदर onCreate विधि

final HorizontalScrollView hs = (HorizontalScrollView)findViewById(R.id.scroll); 

ViewTreeObserver vto = hs.getViewTreeObserver(); 
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 
    @Override 
    public void onGlobalLayout() { 
     hs.getViewTreeObserver().removeGlobalOnLayoutListener(this); 
     maxScrollX = hs.getChildAt(0) 
       .getMeasuredWidth()-getWindowManager().getDefaultDisplay().getWidth(); 

    } 
});   

hs.setOnTouchListener(new OnTouchListener() {   
    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     Log.e("ScrollValue", Integer.toString(hs.getScrollX())); 
    if(hs.getScrollX() == maxScrollX){ 
     Log.e("MaxRight", "MaxRight");  
    } 
    return false; 
    } 
}); 
+0

क्षमा करें, मुझे समझ में नहीं आता कि यह मेरे मुद्दे को कैसे हल कर सकता है ... – jul

+1

मैंने अपना जवाब अपडेट कर दिया है। यदि यह काम नहीं करता है तो यह मदद की जा सकती है http://stackoverflow.com/questions/3948934/synchronise-scrollview-scroll-positions-android – blessenm

+1

+1 Thanx बहुत कुछ, आकर्षण की तरह काम करना। वास्तव में बहुत उपयोगी है। –