2015-07-13 13 views
11

पर सेट असर निम्न छवि देखें समझे। लेकिन एक बार मैं इस तरह एक बिटमैप निर्धारित करते हैं, लहर प्रभाव चला गया है:छवि देखें

<ripple xmlns:android="http://schemas.android.com/apk/res/android" 
        android:color="?android:colorControlHighlight"> 
    <item android:id="@android:id/mask"> 
     <shape android:shape="oval"> 
      <solid android:color="?android:colorAccent" /> 
     </shape> 
    </item> 
</ripple> 

मुझे लगता है कि बिटमैप असर छुपाता है, मैं इसे कैसे कर सकते हैं:

ImageView iv=((ImageView)rootView.findViewById(R.id.header)); 
iv.setImageBitmap(myBitmap); 

यह मेरा ripple.xml है दिखाई? पहले से ही कोशिश की गई है:

  1. एंड्रॉइड में परिवर्तन: एंड्रॉइड में पृष्ठभूमि: अग्रभूमि, जो काम नहीं करता है।
  2. इस के शीर्ष पर एक और पारदर्शी छवि दृश्य को कॉन्फ़िगर करना, लेकिन चूंकि यह पारदर्शी लहर दिखाई नहीं दे रहा था।

कोई विचार? मैंने लॉलीपॉप संपर्कों को भी देखा है।

उत्तर

3

आप इसे प्राप्त कर सकते हैं, एक रिपलड्राउबल में खींचने योग्य लपेटें।

ImageView iv=((ImageView)rootView.findViewById(R.id.header)); 
Drawable image = .... // your image. 

RippleDrawable rippledImage = new 
     RippleDrawable(ColorStateList.valueOf(rippleColor), image, null); 
iv.setImageDrawable(rippledImage) 

;

+0

लेकिन इसके लिए एपीआई 21+ की आवश्यकता है। एपीआई कम करने में सक्षम करने के लिए, समर्थन का उपयोग कर, शायद कोई तरीका है? – Jjang

+3

लहर के लिए एपीआई 21 की आवश्यकता है। आप इसे कम एपीआई के साथ उपयोग नहीं कर सकते हैं। –

+0

ठीक है, यह काम करता है। मैं निम्नलिखित xml को कोड के माध्यम से तरंग खींचने के लिए कैसे लागू करूं? <रिपल xmlns: android = "http://schemas.android.com/apk/res/android" एंड्रॉइड: रंग = "? एंड्रॉइड: रंग नियंत्रण हाइलाइट"> <आइटम एंड्रॉइड: आईडी = "@ एंड्रॉइड: आईडी/मास्क "> <आकार एंड्रॉयड: आकार =" अंडाकार "> <ठोस एंड्रॉयड: रंग =" एंड्रॉयड: colorAccent "/> मैं लेआउट में RippleDrawable बनाने के लिए, क्योंकि मैं नहीं चाहता कि डी को दो बार लेआउट पेस्ट करने की प्रतिलिपि बनाना है। – Jjang

22

मेरे पास एक छवि गैलरी है (RecyclerView और GridLayoutManager के साथ बनाया गया)। चित्र पिकासो का उपयोग कर सेट है। पर एक लहर जोड़ने के लिए मैंने ImageView को FrameLayout के साथ लपेट लिया है। आइटम लेआउट है:

<FrameLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="120dp" 
    android:foreground="@drawable/ripple" 
    android:clickable="true" 
    android:focusable="true" 
    > 
    <ImageView 
     android:id="@+id/grid_item_imageView" 
     android:layout_width="match_parent" 
     android:layout_height="120dp" 
     android:layout_gravity="center" 
     android:scaleType="centerInside" 
     /> 
</FrameLayout> 

नोट android:foreground। यह android:background जैसा नहीं है। मैंने android:clickable="true" और android:focusable="true" के बिना कोशिश की है और यह काम करता है, लेकिन यह चोट नहीं पहुंचाता है। कि इस छवि के शीर्ष पर एक अर्द्ध पारदर्शी रंग से पता चलता है जब मद (संस्करण के साथ उपकरणों Android 5.0 से अधिक उम्र के लिए) का चयन किया जाता

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_pressed="true"> 
     <shape android:shape="rectangle"> 
      <solid android:color="#7FF5AC8E" /> 
     </shape> 
    </item> 
    <item> 
     <shape android:shape="rectangle"> 
      <solid android:color="@android:color/transparent" /> 
     </shape> 
    </item> 
</selector> 

नोट:

फिर res/drawable में एक ripple.xml drawable जोड़ें। यदि आप इसे नहीं चाहते हैं तो आप इसे हटा सकते हैं।

फिर res/drawable-v21 में लहर के साथ ripple.xml drawable जोड़ें:

<ripple xmlns:android="http://schemas.android.com/apk/res/android" 
     android:color="@color/coral"> 
</ripple> 

आप कस्टम ripple.xml के बजाय डिफ़ॉल्ट लहर प्रभाव का उपयोग कर सकते हैं, लेकिन यह क्योंकि यह ग्रे है एक छवि के शीर्ष पर देखने के लिए वास्तव में मुश्किल है:

android:foreground="?android:attr/selectableItemBackground" 
+2

महान काम करता है, धन्यवाद! –

+0

"@ रंग/मूंगा" क्या है? मुझे इसके लिए त्रुटि मिल रही है। – Paritosh

+0

@ पारितोश यह एक रंग संसाधन है। 'Res/values ​​/ colors.xml' में इस तरह का रंग परिभाषित करें: ' # 3F51B5'। जाहिर है, आप इसे अपनी पसंद के किसी भी चीज़ में बदल सकते हैं। –

0

मेरे जैसे आलसी लोगों के लिए:

android:foreground="?android:attr/selectableItemBackground" 

और अपनी शैली में लहर रंग को अनुकूलित करें।

में मूल्यों/styles.xml

<style name="colorControlHighlight_blue"> 
    <item name="colorControlHighlight">@color/main_blue_alpha26</item> 
</style> 

फिर, onCreateView (में मुद्रास्फीति से पहले अपने टुकड़ा) में:

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    getContext().getTheme().applyStyle(R.style.colorControlHighlight_blue, true); //blue ripple color 
    View view = inflater.inflate(R.layout.my_fragment_layout, container, false); 
    return view; 
} 
0

एक परिपत्र प्रभाव के साथ इस प्रयास करें:

<ripple xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:color="@color/colorTema3" 
tools:targetApi="lollipop"> 
<item android:id="@android:id/mask"> 
    <shape android:shape="rectangle"> 
     <solid android:color="@color/colorPurpleBarra" /> 
    </shape> 
</item> 
<item 
    android:id="@android:id/background" 
    android:drawable="@android:color/transparent" /> 

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