2011-09-03 14 views
8

मुझे एक पैनल मिला है जो एक रिलेटिवेलआउट के माध्यम से किसी अन्य दृश्य के शीर्ष पर रखा गया है।एंड्रॉइड पारदर्शी कैनवास (सतहदृश्य)

मैं इस पैनल को एक पारदर्शी पृष्ठभूमि देना चाहता हूं, लेकिन कुछ घंटों के बाद इसे करने का सही तरीका नहीं मिला। जब मैं अल्फा को 0 पर वापस सेट करता हूं तो मैं एक काला पृष्ठभूमि के साथ समाप्त होता हूं।

उम्मीद है कि यहां कोई मेरी मदद कर सकता है।

बहुत बहुत धन्यवाद!

पैनल इस कोड के माध्यम से तैयार की है:

import android.content.Context; 
    import android.graphics.Canvas; 
    import android.graphics.Paint; 
    import android.util.AttributeSet; 
    import android.view.SurfaceHolder; 
    import android.view.SurfaceView; 

    public class Panel extends SurfaceView implements SurfaceHolder.Callback { 

    private ViewThread mThread; 

    Paint paint = new Paint(); 

    public Panel(Context context, AttributeSet attributeSet) { 
     super(context, attributeSet); 
     getHolder().addCallback(this); 
     mThread = new ViewThread(this); 
    } 

    public void doDraw(Canvas canvas) { 
     canvas.drawARGB(50, 120, 120, 120); 

     paint.setARGB(255, 255, 0, 0); 
     paint.setStrokeWidth(2); 

     int CanvasHeight = canvas.getHeight(); 
     int CanvasWidth = canvas.getWidth(); 

     canvas.drawLine(LeftStartX, LeftStartY, StopX, StopY, paint); 
    } 

    public void updateDrawing(float LB, float RB, float BD, float AH, float AD){ 
     Left = LB; 
     Right = RB; 
     Distance = BD; 
     AHeight = AH; 
     ADistance = AD; 
    } 

    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {} 


    public void surfaceCreated(SurfaceHolder holder) { 
     if (!mThread.isAlive()) { 
      mThread = new ViewThread(this); 
      mThread.setRunning(true); 
      mThread.start(); 
     } 
    } 


    public void surfaceDestroyed(SurfaceHolder holder) { 
     if (mThread.isAlive()) { 
      mThread.setRunning(false); 
     } 
    } 
} 

उत्तर

2

कीवर्ड SurfaceView बजाय कैनवास द्वितीय पता चला कि यह संभव नहीं है के साथ खोज करने के बाद। अधिक जानकारी के लिए देखें: how to make surfaceview transparent

क्योंकि कैनवास की पृष्ठभूमि स्थिर है क्योंकि मैंने इसे सटीक पृष्ठभूमि दिया है। अब ऐसा लगता है कि यह पारदर्शी है :)

Bitmap bg = BitmapFactory.decodeResource(getResources(), R.drawable.background_panel_800_480); 
    canvas.drawBitmap(bg, 0, 0, null); 
3

इस प्रयास करें:

getHolder().setFormat(PixelFormat.TRANSLUCENT); 
+0

अपने जवाब के लिए धन्यवाद, लेकिन दुर्भाग्य से इस का समाधान नहीं समस्या। मैंने इस लाइन को 'getHolder() से ऊपर और नीचे रखा है। AddCallback (यह);' लेकिन पृष्ठभूमि काला रहे। – patrick

+0

uhmmm .. 'सेटबैकग्राउंड रिसोर्स (0)' या एक्सएमएल 'एंड्रॉइड में पृष्ठभूमि को हटाने के बारे में क्या है: पृष्ठभूमि =" @ नल "' –

+0

फेरी, आपके नए सुझाव के लिए धन्यवाद, लेकिन दुर्भाग्य से इसने समस्या को हल नहीं किया। यह एक काला पृष्ठभूमि भी दिखाया। – patrick

4

मैं एक ही सवाल से समाधान की नकल की: how to make surfaceview transparent और एक सेटअप आपके जैसे ही साथ काम करने के समझ में आ गया।

मेरे लिए महत्वपूर्ण टुकड़ा 'setZOrderOnTop (true)' सेटिंग था, जिसे मैंने पहले पास पर मूर्खता से अनदेखा किया था। मैंने इसे कन्स्ट्रक्टर में रखा है, और सतह के अंदर RGBA_8888 में अपना पिक्सेल प्रारूप सेट किया है।

इस बिंदु पर, शीर्ष-स्तर लेआउट की पृष्ठभूमि दिखाई दे रही थी।

+0

setZOrderOnTop (सत्य) यहां पहेली का गुम टुकड़ा है, और यह पूरी तरह से अंतर्ज्ञानी है। –

26

निर्माता में:

setZOrderOnTop(true); 

बाद holder.addCallback(this):

holder.setFormat(PixelFormat.TRANSPARENT); 

ड्राइंग की शुरुआत में:

canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR); 
+0

इससे मदद मिली। धन्यवाद! –

+0

ओह, यह जवाब है! यदि पहली कॉल पृष्ठभूमि को पारदर्शी बनाती है, तो अंतिम पंक्ति आपको अल्फा स्तर – Giudark

+0

के साथ बिटमैप्स खींचने की अनुमति देती है, धन्यवाद, यह चाल बहुत कम है, हालांकि: 'setZOrderOnTop' इसे विंडो के शीर्ष पर दिखाई देता है। तो अब SurfaceView अपनी पृष्ठभूमि से ऊपर दिखाई देता है (जो पारदर्शिता के लिए बिल्कुल सही है), लेकिन फिर जब मैं अपना नेविगेशन ड्रॉवर खींचता हूं तो SurfaceView इसके शीर्ष पर भी है (नीचे की जगह), जो भयानक लग रहा है। कोई उपाय? –

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

  • कोई संबंधित समस्या नहीं^_^