2010-09-28 14 views
21

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

विचारों को स्विच करना भी स्वचालित अंतराल में स्वचालित और किया जाता है।

एंड्रॉइड के एसडीके संदर्भ से, मैंने कोई श्रोता नहीं देखा है जब व्यूफ्लिपर बच्चे के दृश्य को बदलता है।

क्या आप लोग इस घटना के लिए श्रोता के रूप में जानते हैं?

या क्या व्यूफ्लिपर का उपयोग करने के अलावा मैं इस सुविधा को लागू करने के वैकल्पिक तरीके हैं?

धन्यवाद!

उत्तर

36

यदि आप दृश्य स्विचिंग पर एनीमेशन (आउट या एनीमेशन) लागू करते हैं, तो आप श्रोता को एनीमेशन पर सेट कर सकते हैं और, उदाहरण के लिए, एनीमेशन अंत पर कार्य करें।

viewFlipper.getInAnimation().setAnimationListener(new Animation.AnimationListener() { 
     public void onAnimationStart(Animation animation) {} 
     public void onAnimationRepeat(Animation animation) {} 
     public void onAnimationEnd(Animation animation) {} 
    }); 
+2

+1 धन्यवाद! वह इसे दबाया। मैं एक्सएमएल आधारित एनीमेशन पैरामीटर का उपयोग कर रहा था इसलिए मैंने इसे पूरी तरह से याद किया। तो अब मैंने अपने एक्सएमएल में होने की बजाय अपनी गतिविधि के अंदर व्यूफ्लिपर एनीमेशन पैरामीटर बनाए हैं। –

+0

सामान्य रूप से मुझे कोड में अधिक सेट करने के लिए सबसे सुविधाजनक लगता है तो xml – slinden77

+0

में यह केवल तभी काम करता है जब आप पहली बार एनीमेशन (और है) :) अन्यथा यह शून्य है –

-1

हालांकि यह एक पुराना प्रश्न है, मुझे एक सभ्य दृष्टिकोण मिल गया जो काम करता है।

public class MainLaunch extends Activity { 

    ... main setup and code 

    int currentIndex = 0; 
    int maxIndex = 3; 

    // set specific animations for the view flipper on showNext 
    // only showNext while in valid index 
    public void showNext() { 
     if(currentIndex < maxIndex) 
     { 
      currentIndex++; 
      viewFlipper.setInAnimation(getBaseContext(), R.anim.slide_in_left); 
      viewFlipper.setOutAnimation(getBaseContext(), R.anim.slide_out_right); 
      viewFlipper.showNext(); 
     } 
    } 

    // set specific animations for the view flipper on showPrevious 
    // only showPrevious while in valid index 
    public void showPrevious() { 
     if(currentIndex > 0) 
     { 
      currentIndex--; 
      viewFlipper.setInAnimation(getBaseContext(), R.anim.slide_in_right); 
      viewFlipper.setOutAnimation(getBaseContext(), R.anim.slide_out_left); 
      viewFlipper.showPrevious(); 
     } 
    } 

    // get current flipped view 
    public View getCurrentView() { 
     return viewFlipper.getChildAt(currentIndex); 
    } 


} 

फिर ViewFlipper उपयोग करने के लिए आप showPrevious फोन showNext() या कहीं और getCurrentView फोन करके वर्तमान में सक्रिय दृश्य प्राप्त कर सकते()। यह बाएं और दाएं फ़्लिपिंग के लिए अलग-अलग एनिमेशन सेट करने और आसानी से वर्तमान काम करने वाले विचारों को प्राप्त करने में सहायता करता है।

0

मैं एक तरह से पता लगाने के लिए जो बच्चे actived है लगता है: ViewFlipper को

addOnLayoutChangeListener, और ViewFlipper की getCurrentView, तो ViewFlipper के बच्चे के साथ तुलना करें।

removeOnLayoutChangeListener को याद है जब गतिविधि onDestory

private View page1, page2, page3, page4; 
private ViewFlipper viewFlipper; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.flipper); 

    page1 = findViewById(R.id.MyFlipper_page01); 
    page2 = findViewById(R.id.MyFlipper_page02); 
    page3 = findViewById(R.id.MyFlipper_page03); 
    page4 = findViewById(R.id.MyFlipper_page04); 

    viewFlipper = (ViewFlipper) findViewById(R.id.MyFlipper_flipper); 

    viewFlipper.addOnLayoutChangeListener(onLayoutChangeListener_viewFlipper); 

} 

View.OnLayoutChangeListener onLayoutChangeListener_viewFlipper = new View.OnLayoutChangeListener() { 
    @Override 
    public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) { 

     if(viewFlipper.getCurrentView() == page1) 
      Log.d("test", "change to flipper_page1"); 
     else if(viewFlipper.getCurrentView() == page2) 
      Log.d("test", "change to flipper_page2"); 
     else if(viewFlipper.getCurrentView() == page3) 
      Log.d("test", "change to flipper_page3"); 
     else if(viewFlipper.getCurrentView() == page4) 
      Log.d("test", "change to flipper_page4"); 



    } 
}; 


@Override 
protected void onDestroy() { 
    super.onDestroy(); 

    viewFlipper.removeOnLayoutChangeListener(onLayoutChangeListener_viewFlipper); 

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