2010-12-31 21 views
12

मेरे पास ऐसी स्थिति है जहां मैं 3 सेकंड के बाद गतिविधि के लेआउट को बदलना चाहता हूं। क्या मैं ऐसा कर सकता हूँ? उदाहरण के लिए एप्लिकेशन स्प्लैशस्क्रीन के साथ शुरू होता है जो 3 सेकंड के लिए चलाएगा, फिर स्वचालित रूप से एप्लिकेशन के पहले स्क्रीन लेआउट में लेआउट स्विच करें। यह एक ही गतिविधि, किसी भी विचार में होना चाहिए?एंड्रॉइड चेंज लेआउट गतिशील रूप से

धन्यवाद

उत्तर

14

मैंने इसे केवल एक एक्सएमएल लेआउट का उपयोग करके किया। मैंने बस इसमें एक अतिरिक्त सापेक्ष लेटआउट लगाया है जो मेरी परिचय स्क्रीन का प्रतिनिधित्व करता है, फिर मैं उस पर एक फीडऑट एनीमेशन का उपयोग करता हूं और फिर .setVisibility (View.GONE) पर कॉल करता हूं।

यह

<RelativeLayout 
     android:id="@+id/introLayout" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
     android:background="#FFFFFF" 
    > 

     <ImageView 
     android:id="@+id/logoImg" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerInParent="true" 
     android:src="@drawable/logo"> 
     </ImageView> 
    </RelativeLayout> 

तब मेरे main.xml लेआउट फ़ाइल का हिस्सा है मेरी गतिविधि के अंदर मैं इस है:

introLayout = (RelativeLayout) findViewById(R.id.introLayout); 
Animation fadeOutAnim = AnimationUtils.loadAnimation(MyActivity.this, R.anim.fadeout); 
introLayout.startAnimation(fadeOutAnim); 
introLayout.setVisibility(View.GONE); 

आप startAnimation डालकर 3 सेकंड के बाद यह रन बना सकता है() , और एक रननेबल के अंदर सेट दृश्यता और पोस्टडेलेड() का उपयोग मार्कस के रूप में किया गया है। हालांकि इस परिचय लेआउट स्क्रीन पर है, जबकि कुछ काम करने पर विचार करें, इसलिए यह उपयोगकर्ता के लिए सिर्फ 3 सेकंड की देरी नहीं है। शायद यह देखने के लिए जांचें कि एप्लिकेशन का चल रहा संस्करण वर्तमान संस्करण है या नहीं।

संपादित करें: आप /res/anim/ को fadout.xml फ़ाइल जोड़ने (यदि यह मौजूद नहीं है anim निर्देशिका बनाने) की आवश्यकता होगी। यहाँ एक उदाहरण है।

fadeout.xml

<?xml version="1.0" encoding="utf-8"?> 

<alpha xmlns:android="http://schemas.android.com/apk/res/android" 
     android:interpolator="@android:anim/accelerate_interpolator" 
     android:fromAlpha="1.0" android:toAlpha="0.0" android:duration="700" 
     android:fillAfter="true"/> 
+0

यह एक स्मार्ट समाधान है! – Sana

+0

'ranim.' में' .anim.' कहां जाता है? मुझे 'एनिम को हल नहीं किया जा सकता है या कोई फ़ील्ड नहीं है' – Alex

+1

@ w0rldart आपको fadeout.xml को '/ res/anim /' फ़ोल्डर में जोड़ने की आवश्यकता है, मेरा संपादन देखें। – FoamyGuy

2

हो सकता है आप एक postDelayed इस्तेमाल कर सकते हैं() - कॉल एक runnable कि setContentView (R.xml.anotherxml) को फोन करके एक नया xml फ़ाइल लोड होगा निष्पादित करने के लिए।

3

बस व्यूस्विचर का उपयोग करें, इसका उपयोग करके किसी भी सेटकंटिव व्यू के बिना एप्लिकेशन के किसी भी लेआउट के बीच स्विच कर सकते हैं।

1

यह adnorid पद को जोड़ने के लिए, कि ViewSwitcher ही केवल 2 लेआउट/दृश्यों के बीच स्विच करने में सक्षम है छोड़ देता है मुझे। यह केवल इसलिए है क्योंकि जहां तक ​​मुझे पता है, गहरा अर्थ के बिना केवल 2 लेआउट/विचारों को हार्डकोड किया गया है। तो मैंने एंड्रॉइड स्रोत से मूल ViewSwitcher.java पर अपना खुद का एकाधिक दृश्य दृश्यविचा उर्फ ​​एमवीएस बनाया। केवल परिवर्तन है कि बनाया जाना था इस प्रकार हैं:

  1. खुद
    • बूलियन mFirstTime और
    • पूर्णांक mWhichChild
  2. सही विचारों का एक मनमाना संख्या के गतिशील निपटने में hardcoded साथ MVS प्रदान करें कार्यों में
    • addView (...)
    • getNextView()
    • रीसेट()

यह सब अकेले MultipleViewSwitcher.java में किया जा सकता है और एक आकर्षण की तरह काम करता है।

मैं इस तरह की चीजों के समूह में आया जहां एंड्रॉइड स्रोतों को कई बार, पास-ब्रेनर-एडिट्स के साथ और अधिक शक्तिशाली बनाया जा सकता था। मैं जानना चाहता हूं कि यह क्यों है, लेकिन यह इस धागे के लिए यहां नहीं है।

चीयर्स!

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