2013-02-23 46 views
6

समस्या & प्रश्न:Drawable कुचल रही

मैं वर्तमान में एक दृश्य के पेजर है, इसके अंदर सिर्फ 2 पृष्ठों/विचारों, जो क्षैतिज एक दूसरे के बगल में हैं के साथ।

मेरे विचार कस्टम हैं जो दो रंगीन ढाल और कम अस्पष्टता/अल्फा मान पर इसके ऊपर एक छवि खींचते हैं।

मुझे लगता है कि जब मैं पहली बार/पृष्ठ से दूसरे या इसके विपरीत में जाने के लिए स्क्रीन पर स्वाइप करता हूं, तो छवियां स्क्वैश हो रही हैं। मैं इसे कैसे होने से रोक सकता हूं, और उन्हें सामान्य रूप से आकर्षित कर सकता हूं?

उदाहरण:

छोड़ दिया छवि कि दिख रहा है पहली बार देखने से पता चलता, पूर्व कड़ी चोट; दाएं छवि दो विचारों को दिखाती है, स्वाइप स्वाइप के माध्यम से मिडवे दिखाती है।

Normal viewSquashed views, as I'm mid-way through swiping

कोड:

मैं एक Drawable चर कि मैंने पहले सेट, overlayImage है कि मैं नहीं अस्पष्टता की स्थापना के अलावा अन्य के लिए कुछ भी किया है है।

@Override 
protected void onDraw(Canvas canvas) { 
    p.setShader(new LinearGradient(0, 0, 0, getHeight(), startColor, endColor, Shader.TileMode.MIRROR)); 
    canvas.drawPaint(p); 

    //Pretty sure the mistake is around these two next lines 
    overlayImage.setBounds(canvas.getClipBounds()); 
    overlayImage.draw(canvas); 
} 
+0

आपका ओवरले इमेज किस प्रकार का ड्रायबल है? यह ऑन ड्रा आपके कस्टम व्यू का हिस्सा है? – Matthieu

+0

"ओवरले इमेज" सचमुच सिर्फ एक नियमित, सादा ड्रायबल है; और हाँ यह ऑनड्रा मेरे कस्टम व्यू का हिस्सा है। –

उत्तर

2

मैं वास्तव में लगता है कि यह कोड के अपने

overlayImage.setBounds(canvas.getClipBounds()); 

कतार में है (यह android:shape="rectangle" बिना कोशिश, मदद कर सकता है कि काम नहीं करता है)। जब आप बाईं ओर की क्लिप सीमाएं प्राप्त कर रहे हैं (सबसे अधिक दाएं स्वाइप में) देखें, तो यह देखने योग्य क्षेत्र का आकार प्राप्त कर रहा है (यानी छोटे सिकुड़ने वाले क्षेत्र) और इस प्रकार छवि को उस घटते स्थान में खींचा जा रहा है।

आप शायद उस दृश्य के समग्र आकार से सीमाएं निर्धारित करना चाहते हैं, जो कि क्लिप की सीमाओं पर ओवरलेन नहीं हो रहा है। इसके बजाय कैनवास के getHeight() और getWidth() का उपयोग करें और अपनी सीमाएं बनाएं।

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

0

मुझे लगता है कि आप drawable-hdpi फ़ोल्डर में एक xml बनाने की जरूरत है। जो आपके shader/linear gradiant शामिल होंगे .. (विकल्प here देखने के लिए)

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

<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> 
    <gradient 
     android:startColor="#474946" 
     android:endColor="#181818" 
     android:angle="270"/> 
</shape> 

और फिर आप xml पृष्ठभूमि के रूप में .. जो समस्या मुझे लगता है कि ठीक करना चाहिए सेट कर सकते हैं।