2012-01-02 27 views
6

me gustaría hacer área de lienzo transparente porque me gustaría añadir una imagen detrás de él para que las acciones ocurren lona encima del código image.My para el lienzo es aquí¿Cómo hacer que Canvas dibuje el área transparente en 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); 
} 

}

Cómo lograrlo, cualquier fragmento será de mucha ayuda. Gracias

Respuesta

23

Tengo la salida por esta

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

Bueno, no estoy seguro acerca de dibujar el lienzo transparente, pero en su caso puede hacer un ajuste, que dibuje el lienzo usando la imagen de fondo.

Y luego puede dibujar/pintar con el dedo sobre él.

ejemplo Código:

 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

yo probamos este ... – Karthik

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

primer atributo es el alfa y el resto son los colores RGB.

o

canvas.drawColor(Color.TRANSPARENT); 
+4

Esto parece que no funciona, solo se deja en negro. – Karthik

+0

¿Dibuja cualquier otro color correctamente? ¿cuál es el color de fondo de su vista de superficie? –

+0

Dibuja otro color correctamente pero cuando pruebo esto obtengo solo fondo negro ...¿Cómo puedo deshacerme de esto? – Karthik

4

En el método de onDraw() añadir lo siguiente:

canvas.drawColor(0x00AAAAAA); 

Esto hará que su transparente canvas y background View serán visibles .

12

Si usted quiere tener un lienzo con un fondo transparente que tiene que configurar la imagen de fondo para la

mCanvas = nueva mano (mBackgroundBitmap);

con Bitmap.Config.ARGB_4444

y utilizar colores como 0x00000000 como transparente

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

esperanza esto ayuda! Tengo un lienzo bastante transparente: ¡D yay! color de fondo de la vista

0

Conjunto de lona para # 00000000

0

Usted puede crear un mapa de bits del mismo tamaño que el lienzo. Borrar todos los colores del mapa de bits utilizando Color.TRANSPARENCY y configurarlo como un mapa de bits de la lona:

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

UnsupportedOperationException –

1

esta marca tramsparent lienzo y es un trabajo para mí :)

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