परिचय:Animating weightSum संपत्ति ObjectAnimator का उपयोग कर
मैं एक LinearLayout, जो दो उप LinearLayouts, इसलिए की तरह शामिल है:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/dual_pane"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal"
android:weightSum="1.0">
<!-- Screen 1 -->
<LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:background="#ff0000"
android:layout_weight="1">
</LinearLayout>
<!-- Screen 2 -->
<LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:background="#ff6600"
android:layout_weight="1">
</LinearLayout>
</LinearLayout>
प्रारंभ में, मैं चाहता हूँ "स्क्रीन 1" सभी स्क्रीन चौड़ाई लेने के लिए उपलब्ध। इसलिए, मेरे R.id.dual_pane में इसका वजन 1.0 है। यह ठीक काम करता है! अगर weightSum = 1.0, स्क्रीन 1 पूरी स्क्रीन पर है!
कुछ संसाधन लोड करने के बाद, मैं अपने R.id.dual_pane weighSum 2.0 को बदलता हूं, जिसके परिणामस्वरूप स्क्रीन 1 और स्क्रीन 2 दोनों स्क्रीन की चौड़ाई से 50% लेते हैं। यह भी सही काम करता है। जब weightSum = 2.0, दोनों स्क्रीन चौड़ाई का 50% लेते हैं।
समस्या:।
मैं weightSum संपत्ति चेतन करना चाहते हैं, तो मेरे screen2, में स्लाइड हो जाएगा मैं मधुकोश लक्षित कर रहा हूं तो minSDK संस्करण 11 है, और मैं सोचा, नए ObjectAnimator ढांचे का उपयोग कर, एक अच्छा चिकनी प्रभाव प्राप्त करने के लिए, मैं आसानी से इस संपत्ति को एनिमेट कर सकता हूं। मैंने सत्यापित किया कि LinearLayout वास्तव में WeightSum() और setWeightSum() विधियों (जो ऑब्जेक्टएनिमीटर का उपयोग करने के लिए आवश्यक है, मुझे लगता है) प्राप्त किया है।
खुद प्रयास:
यहाँ ObjectAnimator का उपयोग कर दिखा और छुपा screen2 करने के लिए अपने कोड है:
private void showScreen2()
{
//Not-animated will work...
//mDualPane.setWeightSum(2.0f);
// Now try to animate the weightSum
float ws = mDualPane.getWeightSum();
ObjectAnimator anim = ObjectAnimator.ofFloat(mDualPane, "weightSum", ws, 2.0f);
anim.setDuration(5000);
anim.start();
}
private void hideScreen2()
{
//Not-animated will work...
//mDualPane.setWeightSum(1.0f);
// Now try to animate the weightSum
float ws = mDualPane.getWeightSum();
ObjectAnimator anim = ObjectAnimator.ofFloat(mDualPane, "weightSum", ws, 1.0f);
anim.setDuration(5000);
anim.start();
}
यहाँ, मेरी mDualPane मेरी जड़ LinearLayout ...
प्रश्न है:
जब मैं इन कार्यों को कॉल करता हूं, कुछ भी नहीं appens। स्क्रीन बिल्कुल पहले की तरह रहता है। क्या मुझे कहीं मेरे mDualPane पर requestLayout() को कॉल करने की आवश्यकता है? क्या मुझे ऑब्जेक्टएनिमीटर का कुछ ज्ञान याद आ रहा है? या वजन घटाने की संपत्ति को एनिमेट करना असंभव है?
भी:
1) मैं हार्ड-कोडेड चौड़ाई के साथ गड़बड़ नहीं करना चाहते हैं, और उन चेतन। अभी के लिए मैं दोनों स्क्रीन के लिए 50-50 चाहता हूं, लेकिन मैं इसे बाद में बदल सकता हूं। वैसे भी, मुझे दो चौड़ाई के बीच एक विशिष्ट अनुपात निर्धारित करने में सक्षम होना चाहिए।
2) मैं दृश्यता टॉगल के साथ संयुक्त LayoutTransition पर ध्यान दिया है, लेकिन कोई लाभ नहीं हुआ
नमस्ते, एंटर्रेको यदि दो रैखिक लेआउट असमान भार रखते हैं, तो क्या हम बाएं तरफ दाएं तरफ लेआउट को स्थानांतरित करने और पूरी स्क्रीन भरने के लिए संभव बना सकते हैं? कृपया – user1108995
दुर्भाग्यवश, यह केवल रैखिकलाइट की प्रकृति के कारण बाएं से दाएं दृश्यों को स्लाइड करने के लिए काम करता है। इसे दूसरी तरफ करने के लिए, मेरा सुझाव है कि आप http://stackoverflow.com/questions/4932462/animate-the-transition-between-fragments – Entreco
देखें, मेरे दो दृश्य लाइनरलाइट में भी हैं लेकिन असमान भार – user1108995