2015-02-28 30 views
12

पर गायब हो रहे हैं मैंने फ़्लोटिंग एक्शन बटन के लिए अभी फ्यूचर सिंपल लाइब्रेरी स्थापित की है, और मुझे लगता है कि यह सिर्फ सुंदर है। हालांकि इसमें स्क्रॉल तर्क पर गायब नहीं है, मुझे यह पसंद है। हालांकि, मैं एक त्वरित रिटर्न पैटर्न को कार्यान्वित करना चाहता हूं और मैं इसे करने का एक आसान तरीका ढूंढ रहा हूं। मूल रूप से, मैं एक ObservableListView श्रोता तो की तरह सेट:फ़्लोटिंग एक्शन बटन स्क्रॉल

listView.setScrollViewCallbacks(new ObservableScrollViewCallbacks() { 
     @Override 
     public void onScrollChanged(int i, boolean b, boolean b2) { } 

     @Override 
     public void onDownMotionEvent() { } 

     @Override 
     public void onUpOrCancelMotionEvent(ScrollState scrollState) { } 
    }); 

और मैं वहाँ मेरे बटन चाल बनाने के लिए एक आसान तरीका है अगर जानना चाहता हूँ के साथ (एक त्वरित button.animate() के साथ translationY (xx)।) यह श्रोता

ताकि जब भी मैं स्क्रॉल करता हूं, यह गायब हो जाता है, और फिर जब मैं स्क्रॉल करता हूं तो यह फिर से दिखाई देता है।

मैंने अलग-अलग कार्यान्वयन पर ध्यान दिया है, लेकिन मुझे उन लोगों की समझ नहीं मिली है (विशेष रूप से "आधिकारिक" फैब लाइब्रेरी मकोवस्तार से)।

पीएस: मैं भविष्य की सरल पुस्तकालय का उपयोग कर रहा हूं क्योंकि इसमें मेनू हैं।

आपकी बहुत वांछित सहायता के लिए, बहुत पहले, धन्यवाद!

+0

आपके नमूना कोड में क्या fam है? – uberchilly

+0

fam = your fab। मैं एक कस्टम लाइब्रेरी का उपयोग कर रहा हूं जो फ़्लोटिंग एक्शनमेनू को संभालता है, लेकिन किसी भी मानक उदाहरण में, यह फ़्लोटिंगएक्शन बटन (डिज़ाइन सपोर्ट लाइब्रेरी या सिर्फ एक छविबटन से) होगा और आप इसे fab कहेंगे। Lalliga के आकार के अनुसार – Mehdi

+0

tnx। – Setmax

उत्तर

3

मैं कुछ सप्ताह पहले मेरी समस्या हल, और मैं मैं शायद यहाँ मेरे अपने प्रश्न :)

अनुसंधान के कई दिनों के बाद उत्तर देना चाहिए लगा, मैंने पाया था सबसे अच्छा तरीका लागू करने के लिए है कि इस का उपयोग करना है एंड्रॉइड द्वारा पेश किया गया नया पुनर्चक्रण दृश्य। आप RecyclerView के साथ स्क्रॉलिंग में छोटे पिक्सेल परिवर्तनों को संभाल सकते हैं, लेकिन ListView के साथ आप लगभग ऐसा करने में सक्षम नहीं होंगे (केवल स्क्रॉल किए गए "आइटम" के परिवर्तन को संभाल सकते हैं)। मैं इस तरह मेरी RecyclerView करने के लिए एक scrollview श्रोता को क्रियान्वित किया है:

public abstract class HidingScrollListener extends RecyclerView.OnScrollListener { 
private static final int HIDE_THRESHOLD = 20; 
private int scrolledDistance = 0; 
private boolean controlsVisible = true; 

@Override 
public void onScrolled(RecyclerView recyclerView, int dx, int dy) { 
    super.onScrolled(recyclerView, dx, dy); 

    int firstVisibleItem = ((LinearLayoutManager) recyclerView.getLayoutManager()).findFirstVisibleItemPosition(); 
    //show views if first item is first visible position and views are hidden 
    if (firstVisibleItem == 0) { 
     if(!controlsVisible) { 
      onShow(); 
      controlsVisible = true; 
     } 
    } else { 
     if (scrolledDistance > HIDE_THRESHOLD && controlsVisible) { 
      onHide(); 
      controlsVisible = false; 
      scrolledDistance = 0; 
     } else if (scrolledDistance < -HIDE_THRESHOLD && !controlsVisible) { 
      onShow(); 
      controlsVisible = true; 
      scrolledDistance = 0; 
     } 
    } 

    if((controlsVisible && dy>0) || (!controlsVisible && dy<0)) { 
     scrolledDistance += dy; 
    } 
} 

public abstract void onHide(); 
public abstract void onShow(); 

इस कोड से अधिक सिर्फ दिखाने या स्क्रॉल पर FABs छिपाने करता है, यह वास्तव में एक बहुत सही प्रभाव "कार्रवाई बार स्क्रॉल पर गायब हो जाता है" संभालती है। लेकिन, मेरे पास आपकी आवश्यकताओं के अनुरूप इस कोड को पूरा करने का समय नहीं है, लेकिन हमारे मामले के लिए यहां काम करता है।

इसके इंटरफेस को लागू करने से वापस हमारे कोड के लिए प्राप्त करने के लिए, हमारे श्रोता बनाने के बाद, हम इसे हमारे FABs को जोड़ सकते हैं:

  recyclerView.setOnScrollListener(new HidingScrollListener() { 
     @Override 
     public void onHide() { 
        FrameLayout.LayoutParams lp = (FrameLayout.LayoutParams) fam.getLayoutParams(); 
    int fabBottomMargin = lp.bottomMargin; 
    fam.animate().translationY(fam.getHeight()+fabBottomMargin).setInterpolator(new AccelerateInterpolator(2)).start(); 
     } 

     @Override 
     public void onShow() { 
        toolbar.animate().translationY(0).setInterpolator(new DecelerateInterpolator(2)); 
    fam.animate().translationY(0).setInterpolator(new DecelerateInterpolator(2)).start(); 
     } 
    }); 

और देखा!

संबंधित मुद्दे