Android transparent toile (surfaceview)
J'ai un panneau qui est placé sur le haut d'un autre point de vue par l'intermédiaire d'un relativelayout.
Je voudrais donner ce panneau un fond transparent, mais n'a pas trouvé la bonne façon de le faire après la recherche de quelques heures. Lorsque j'ai mis l'alpha à 0, je me retrouve avec un fond noir.
J'espère que quelqu'un ici peut m'aider avec cela.
Merci beaucoup!
Le panneau est attirée par l'intermédiaire de ce code:
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);
}
}
}
OriginalL'auteur patrick | 2011-09-03
Vous devez vous connecter pour publier un commentaire.
Dans le constructeur:
Après
holder.addCallback(this)
:Au début du dessin:
Oh, c'est la réponse! si les premiers appels rendre le fond transparent, la dernière ligne vous permet également de dessiner des images avec des alpha niveau
Merci, ça fait le truc, un peu trop bien:
setZOrderOnTop
fait apparaître tout en haut de la fenêtre. Alors maintenant, la SurfaceView apparaît au-dessus de son arrière-plan (ce qui est parfait pour la transparence), mais alors quand je fais glisser ma Navigation Tiroir de la SurfaceView est également sur le dessus de celui-ci (au lieu de dessous), qui a l'air terrible. Une idée?juste d'avoir le même problème, avez vous trouvez une solution?
J'ai passé des jours à essayer de comprendre cela. Merci beaucoup!!
OriginalL'auteur Bilal Sammour
J'ai copié la solution à partir de la même question: comment faire surfaceview transparent et réussi à le faire fonctionner avec une configuration similaire à la vôtre.
L'élément essentiel pour moi était le " setZOrderOnTop(vrai)", dont j'ai bêtement ignoré lors de la première passe. Je l'ai mis dans le constructeur, et de mettre mon format de pixel RGBA_8888 à l'intérieur de surfaceCreated.
À ce stade, l'arrière-plan à partir du haut niveau de la mise en page est visible.
OriginalL'auteur ProjectJourneyman
Essayez ceci:
getHolder().addCallback(this);
mais le fond est resté noir.... uhmmm.. ce que sur la suppression de l'arrière-plan avec
setBackgroundResource(0)
ou en xmlandroid:background="@null"
Ferdy, merci pour votre nouvelle suggestion, mais, malheureusement, cela ne résout pas le problème. Cela a montré un arrière-plan noir.
OriginalL'auteur Fernando Gallego
Après une recherche avec le mot-clé surfaceview au lieu de toile, iI a conclu qu'il n'est pas possible. Pour plus d'informations, voir: comment faire surfaceview transparent
Parce que le fond de la toile est statique, j'ai donné exactement le même arrière-plan. Maintenant, on dirait qu'il est transparent 🙂
OriginalL'auteur patrick