2016-01-08 8 views
13

मैं एक लेआउट के साथ , कि एक और लेआउट में शामिल हैं: एंड्रॉयड: RippleEffect और StateListAnimator

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:orientation="vertical" 
      android:id="@+id/layout1"> 

    <include layout="@layout/my_layout"/> 
</LinearLayout> 

मैं शामिल जमाव के बारे में RippleEffect जोड़ने के लिए और साथ ही एक StateListAnimator की जरूरत है।

उदाहरण:

<include layout="@layout/my_layout" 
      android:stateListAnimator="@anim/lift_up" 
      android:background="@drawable/ripple_effect"/> 

दोनों RippleEffect और StateListAnimator 100% काम करते हैं। मैं शामिल लेआउट को बदल नहीं सकता। इस प्रकार कारणों को मुझे टैग या पैरेंट लेआउट में शामिल करने के प्रभावों को करने की आवश्यकता है।

मैंने दोनों तकनीकों की कोशिश की है, जिनमें से कोई भी सफल नहीं हुआ है।

अद्यतन

यदि संभव हो, यह नीचे प्रोग्राम के रूप में होना चाहिए।

अद्यतन 2

दूसरे, how would I go about keep the View elevated, एक बार यह एनिमेटेड है?

उत्तर

2

आपको दृश्य सूची और राज्य सूची एनिमेटर और पृष्ठभूमि को बदलने के लिए उपयुक्त विधि को कॉल करने की आवश्यकता है। आपको लेआउट शामिल रूट दृश्य पर सेटक्लिकेबल को भी कॉल करने की आवश्यकता हो सकती है।

LinearLayout layout1 = findViewById(R.id.layout1); 
View root = layout1.getChildAt(0); 

StateListAnimator sla = AnimatorInflater.loadStateListAnimator(context, R.anim.lift_up); 
root.setStateListAnimator(sla); 
root.setBackground(R.drawable.ripple_effect); 
+0

यह पर्याप्त कानूनी लगता है। मैंने एसएलए के आधार पर प्रश्न को एक और पहलू के साथ अद्यतन किया है। – TejjD

+2

आप संपादित एक अलग सवाल है। आपको उस विशिष्ट समस्या के साथ एक और खोलना चाहिए। –

+0

कूल। वर्तमान प्रश्न के साथ, आपकी विधि तरंग प्रभाव को सही ढंग से सक्षम करती है, हालांकि एसएलए को निकाल दिया नहीं जाता है। मुझे कोई ऊंचाई नहीं मिल रही है – TejjD

2

धागा के आधार पर Does Android XML Layout's 'include' Tag Really Work? और LayoutInflater.java ऐसा लगता है <include> टैग केवल android:id, layout_* और android:visibility विशेषताओं का समर्थन करता है। तो background और stateListAnimator सेट करने के लिए आपका कोड कोई प्रभाव नहीं पड़ता है।

@Stepane के कोड के साथ नीचे समस्या को ठीक करने के लिए:

अपने विधि ठीक से असर सक्षम बनाता है, फिर भी SLA निकाल नहीं है। मैं किसी भी ऊंचाई लेने जगह

नहीं देख सकते हैं फुलाया दृश्य पारदर्शी है, तो ऊंचाई दिखाई नहीं देता है, तो आप viewOutline सेट या छाया देखने के लिए देखने के लिए कुछ गैर पारदर्शी रंग का उपयोग करने के लिए है।

से एक उद्धरण ViewOutlineProviderdocumentation:

इंटरफ़ेस है जिसके द्वारा एक दृश्य इसकी रूपरेखा, छाया कास्टिंग और कतरन के लिए इस्तेमाल किया बनाता है।

View#setOutlineProvider (ViewOutlineProvider provider) पद्धति के उपयोग outlineProvider आप कर सकते हैं सेट करने के लिए या आप android:outlineProvider एक्सएमएल टैग के माध्यम से सेट कर सकते हैं।

अपडेट किया गया कोड:

LinearLayout root =(LinearLayout) findViewById(R.id.container); 
StateListAnimator sla = AnimatorInflater.loadStateListAnimator(this, R.animator.lift_up); 
root.setStateListAnimator(sla); 
root.setClickable(true); 
root.setOutlineProvider(ViewOutlineProvider.PADDED_BOUNDS); 
root.setBackground(ContextCompat.getDrawable(this, R.drawable.ripple_effect)); 

ripple_effect.xml

<ripple 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:color="?android:colorAccent" 
    tools:ignore="NewApi"> 
    <item> 
    <shape 
     android:shape="rectangle"> 
     <solid android:color="@android:color/transparent"/>    
     <!-- Doesn't require outlineProvider 
     <solid android:color="@android:color/darker_gray"/> 
     --> 
    </shape> 
    </item> 
</ripple> 

रेस/एनिमेटर/lift_up.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item 
     android:state_enabled="true" 
     android:state_pressed="true"> 
    <objectAnimator 
     android:duration="@android:integer/config_shortAnimTime" 
     android:propertyName="translationZ" 
     android:valueTo="48dp"/> 
    </item> 
    <item> 
    <objectAnimator 
     android:duration="@android:integer/config_shortAnimTime" 
     android:propertyName="translationZ" 
     android:valueTo="0dp"/> 
    </item> 
</selector> 
+0

स्पष्टीकरण के लिए धन्यवाद, लेकिन यह अभी भी काम नहीं कर रहा है। मुझे लगता है कि मुद्दा यह है कि टैग माता-पिता की चौड़ाई से मेल खाता है, इसलिए वास्तविक ऊंचाई दिखाई नहीं दे रही है। मैंने हर तरीके से अपनी विधि की कोशिश की है। – TejjD

+0

@TejjD का कोई फायदा नहीं हुआ मैंने ऊंचाई और चौड़ाई के लिए match_parent का उपयोग करने का प्रयास किया है, सब कुछ ठीक काम कर रहा है। मैंने स्पष्टता के लिए 'lift_up.xml' (ऊंचाई) कोड शामिल करने के लिए पोस्ट को अपडेट किया है, इसे जांचें। बस उत्सुक, परीक्षण उपकरण के लिए आप किस डिवाइस और एंड्रॉइड संस्करण का उपयोग कर रहे हैं? – blizzard

+0

यह वही सटीक कोड है जिसका मैं उपयोग कर रहा हूं। मैं नेक्सस 6 पी पर परीक्षण कर रहा हूं, मार्शमलो – TejjD

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