2012-01-25 21 views
5

में छवि द्वारा छुपा स्लाइडिंग ड्रावर मेरे पास एक स्लाइडिंग ड्रावर और एक कस्टम सतह दृश्य है जो एक छवि प्रस्तुत करता है। मैंने अभी स्लाइडिंग ड्रावर को खींचने की कोशिश की है और ऐसा करने में यह पता चला है कि यह SurfaceView में छवि के पीछे जाता है और पूरी तरह छुपा हुआ है।SurfaceView

जैसा कि आप कल्पना कर सकते हैं कि यह उपयोगकर्ता के लिए अधिक उपयोग नहीं करेगा और इसलिए इसे खींचने पर स्लाइडिंग ड्रावर के पीछे हमेशा गिरने की आवश्यकता होती है। क्या यह संभव है?

बैठाना यह मदद करता है इस एक्सएमएल में SlidingDrawer है:

<SlidingDrawer 
      android:id="@+id/drawer" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:handle="@+id/handle" 
      android:content="@+id/content" 
      android:layout_alignParentBottom="true"> 

      <TextView 
       android:id="@id/handle" 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:gravity="center" 
       android:paddingTop="5dip" 
       android:paddingBottom="5dip" 
       android:textStyle="bold" 
       android:text="text"/> 


      <include layout="@layout/content" 
       android:id="@id/content" 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent"/> 

     </SlidingDrawer> 

और यह xml में SurfaceView है:

<FrameLayout android:id="@+id/FrameLayout01" 
     android:layout_width="fill_parent" android:layout_height="fill_parent"> 
     <com.android.imagemagic.widgets.ImageManipulationSurfaceView 
     android:id="@+id/surfaceArea" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" android:layout_gravity="center"/> 
    </FrameLayout> 

SurfaceView रिवाज है और (OnDraw में निम्न कोड का उपयोग करता है) विधि:

@Override 
public void onDraw(Canvas canvas) { 
    super.onDraw(canvas); 

    //Clear canvas 
    Paint paint = new Paint(); 
    paint.setXfermode(new PorterDuffXfermode(Mode.CLEAR)); 
    canvas.drawPaint(paint); 
    paint.setXfermode(new PorterDuffXfermode(Mode.SRC)); 

    // Draw image 
    canvas.drawBitmap(image, imageX, imageY, null); 
} 

उत्तर

5

बहुत स्कैनिंग के बाद मुझे निम्नलिखित स्टैक ओवरफ़्लो पृष्ठ: Android: SlidingDrawer disappears under SurfaceView से मेरी समस्या का (सरल) उत्तर मिला है। काफी बस SlidingDrawer एक्सएमएल तत्व में जोड़ें:

android:background="#00000000"; 

संपादित

पृष्ठभूमि इसे फिर से काम करना बंद कर implimenting के बाद वापस अपने मूल स्वरूप में वापस लौटा कोड करने के बाद। अंत में मैंने पाया कि मेरे पास दूसरा मुद्दा था जो उपर्युक्त समाधान को काम करने से रोकता था। हर किसी की लाभ के लिए, सुनिश्चित करें कि आप के माध्यम से शीर्ष करने के लिए SurfaceView z- सूचकांक निर्धारित नहीं करते हैं:

sv.setZOrderOnTop(true); 
+0

मैंने कहा कि मेरी टिप्पणी में: मुझे खुशी है कि आपको यह – Blundell

+0

भी मिला है! आपकी सहायता के लिए धन्यवाद. –

+0

यदि आप शीर्ष उपयोग पर लेआउट बनाना चाहते हैं: 'sv.setZOrderMediaOverlay (true) ' –

0

क्या आपने अपनी सुपर क्लास ड्रा को आखिरी बार देने की कोशिश की है ताकि आप डॉ इसके नीचे बहुत?

@Override 
public void onDraw(Canvas canvas) { 
    //Clear canvas 
    Paint paint = new Paint(); 
    paint.setXfermode(new PorterDuffXfermode(Mode.CLEAR)); 
    canvas.drawPaint(paint); 
    paint.setXfermode(new PorterDuffXfermode(Mode.SRC)); 

    // Draw image 
    canvas.drawBitmap(image, imageX, imageY, null); 

    super.onDraw(canvas); 
} 

एक रपट ड्रा का उपयोग कर के लिए एक Alernative कि एक बटन शुरू एक नई गतिविधि है करने के लिए है, तो आप overridependingtransition(int enterAnim, int exitAnim)setContentView() से पहले गतिविधि में और बाहर स्लाइड करने के लिए चेतन करने के लिए कहते हैं।

+0

ब्लंडेल, आपके उत्तर के लिए बहुत धन्यवाद। जैसा कि आपने सुझाव दिया है, सुपर.ऑनड्रा (कैनवास) को स्थानांतरित करने का प्रयास किया और इससे कोई फर्क नहीं पड़ता कि मुझे डर है। एक गतिविधि का उपयोग करने का विकल्प अच्छा है। मैं निश्चित रूप से जांच करूँगा। –

+0

स्लाइडिंग ड्रावर और सतह की आपकी एक्सएमएल फ़ाइल कहां है? यानी मुझे उम्मीद है कि, '? – Blundell

+0

ब्लंडेल, स्लाइडिंग ड्रावर और सतह विभिन्न लेआउट में हैं। स्लाइडिंग ड्रावर मुख्य गतिविधि के लेआउट में है जबकि सतह एक लेआउट में उपयोग की जाती है जो मुख्य गतिविधियों के लेआउट में बैठती है। मैं टुकड़ों का उपयोग कर रहा हूँ। –

0

मुझे भी इसी तरह की समस्या का सामना करना पड़ा। लेकिन मुझे इसके लिए एक कामकाज मिला।
बस स्लाइड करेंडलबटन.सेटटेक्स्ट (""); जब दराज बंद हो जाता है। इससे बटन दिखाई देगा :)