2012-01-02 2 views
6

Vorrei fare spazio della tela trasparente perché vorrei aggiungere un'immagine dietro di esso in modo che le azioni di tela accadere sopra il codice image.My per la tela è quiCome rendere l'area di disegno Canvas trasparente in Android?

public class Panel extends SurfaceView implements SurfaceHolder.Callback { 

private ViewThread mThread; 
private ArrayList<Element> mElements = new ArrayList<Element>(); 

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


public void doDraw(Canvas canvas) { 
    canvas.drawColor(Color.TRANSPARENT); 
    synchronized (mElements) { 
     for (Element element : mElements) { 
      element.doDraw(canvas); 
     } 
    } 
} 

@Override 
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { 
    // TODO Auto-generated method stub 
} 

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

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

@Override 
public boolean onTouchEvent(MotionEvent event) { 
    synchronized (mElements) { 
     mElements.add(new Element(getResources(), (int) event.getX(), (int) event.getY())); 
    } 
    return super.onTouchEvent(event); 
} 

}

Come realizzarlo, qualsiasi frammento su di esso sarà molto utile.Grazie

risposta

23

ho ottenuto l'uscita da questo

public Panel(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    this.setBackgroundColor(Color.TRANSPARENT);     
    this.setZOrderOnTop(true); //necessary     
    getHolder().setFormat(PixelFormat.TRANSPARENT); 
    getHolder().addCallback(this); 
    mThread = new ViewThread(this); 

} 
0

beh, non sono sicuro di disegnare la tela trasparente, ma nel tuo caso puoi fare un tweak, che disegna la tela usando l'immagine di sfondo stessa.

E quindi è possibile disegnare/dipingere con un dito su di esso.

Codice esempio:

 BitmapDrawable bd = (BitmapDrawable)<YOUR_ACTIVITY>.this.getResources().getDrawable(R.drawable.<DRAWBLE_ID>); 
     Bitmap b = bd.getBitmap(); 

     mBitmap = Bitmap.createBitmap(b,0,0,100,100); // This line is required only if you wanna some change in the bitmap you created 
     mCanvas = new Canvas(mBitmap); 
+0

Ho provato questo ... – Karthik

6
canvas.drawColor(Color.argb(0, 255, 255, 255)); 

primo attributo è alfa e riposo sono i colori RGB.

o

canvas.drawColor(Color.TRANSPARENT); 
+4

Sembra che entrambi non funzionino, lascia solo nero. – Karthik

+0

disegna correttamente un altro colore ??? qual è il colore di fondo della tua vista di superficie? –

+0

Disegna correttamente altri colori, ma quando lo provo ottengo solo uno sfondo nero ..Come posso liberarmi di questo .. – Karthik

4

nel metodo onDraw() aggiungere questo:

canvas.drawColor(0x00AAAAAA); 

Questo renderà la vostra canvas trasparente e background View saranno visibili .

12

Se si vuole avere una tela con uno sfondo trasparente è necessario configurare l'immagine di sfondo per la

mCanvas = new tela (mBackgroundBitmap);

con Bitmap.Config.ARGB_4444

e sull'uso di colori come il 0x00000000 come trasparente

Bitmap mBackgroundImage = Bitmap.createBitmap(Size, Size, 
        Bitmap.Config.ARGB_4444); 
    mCanvas = new Canvas(mBackgroundImage); 

speranza che questo aiuta! Ho una tela abbastanza trasparente: D yay! colore di sfondo della vista

0

Set di tela per # 00000000

0

È possibile creare una bitmap della stessa dimensione come la tela. Cancellare tutti i colori del bitmap utilizzando Color.TRANSPARENCY e impostarlo come un bitmap canvas:

Bitmap transparentBitmap = Bitmap.createBitmap(canvas.getWidth(), canvas.getHeight(), 
Bitmap.Config.ARGB_8888); 
transparentBitmap.eraseColor(Color.TRANSPARENT); 
canvas.setBitmap(transparentBitmap); 
+0

UnsupportedOperationException –

1

questo make tela tramsparent ed è il lavoro per me :)

canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.OVERLAY);