par programme assombrir une Vue sur android
J'ai trouvé comment modifier l'opacité d'un Vue
, mais j'ai besoin de foncer un View
. Ma meilleure idée est de mettre un transparent rectangle noir au-dessus, puis augmenter lentement l'opacité du rectangle.
Connaissez-vous une meilleure façon de le faire?
public class Page07AnimationView extends ParentPageAnimationView {
private final String TAG = this.getClass().getSimpleName();
private ImageView overlay;
private int mAlpha = 0;
public Page07AnimationView(Context context) {
super(context);
}
public Page07AnimationView(Context context, AttributeSet attrs) {
super(context, attrs);
}
protected void init()
{
overlay = new ImageView(mContext);
overlay.setImageResource(R.drawable.black_background);
overlay.setAlpha(0);
overlay.setWillNotDraw(false);
//make the PageAniSurfaceView focusable so it can handle events
setFocusable(true);
}
protected void draw_bitmaps(Canvas canvas)
{
overlay.draw(canvas);
update_bitmaps();
invalidate();
}
public void update_bitmaps()
{
if(mAlpha < 250)
{
mAlpha += 10;
overlay.setAlpha(mAlpha);
}
}
}
Le code ci-dessus n'est pas de faire ce que j'avais espéré. Page07AnimationView
est ajouté à un FrameLayout
sur la vue j'ai besoin de foncer. R.drawable.black_background
points pour un 787px x 492px noir image png.
J'ai ajouté overlay.setWillNotDraw(false);
mais il n'a pas aidé.
J'ai changé le premier setAlpha(0)
à setAlpha(255)
mais cela n'a pas aidé.
J'ai enlevé le setAlpha()
appels au total, mais il ne l'a pas aidé.
Cette technique de base de l'ajout d'un PageNNAnimationView
a travaillé pour dessiner Bitmaps
, mais de ne pas tirer de ImageView overlay
. (Je voudrais utiliser Bitmaps
, mais ils ne semblent pas avoir une composante alpha.)
Edit2: c'est le parent de la classe ci-dessus:
public class ParentPageAnimationView extends View {
private final String TAG = this.getClass().getSimpleName();
protected Context mContext;
public ParentPageAnimationView(Context context) {
super(context);
mContext = context;
init();
}
public ParentPageAnimationView(Context context, AttributeSet attrs) {
super(context, attrs);
mContext = context;
init();
}
protected void init()
{
}
protected void draw_bitmaps(Canvas canvas)
{
//will be overridden by child classes
}
@Override
protected void onDraw(Canvas canvas) {
if(this.getVisibility() == View.VISIBLE)
{
if(canvas != null)
{
draw_bitmaps(canvas);
}
}
}
public void update_bitmaps()
{
//will be overridden by child classes
}
public void elementStarted(PageElement _pageElement) {
//Nothing in parent class
}
public void elementFinished(PageElement mElement) {
//Nothing in parent class
}
}
OriginalL'auteur Thunder Rabbit | 2011-07-05
Vous devez vous connecter pour publier un commentaire.
Je préfère le faire dans l'autre sens - mettre un sombre rectangle de la vue et de définir l'affichage de l'opacité. Cela permet d'économiser de la peinture le rectangle lorsque la vue est 100% opaque.
Lors de l'exécution d'une animation derrière un translucide vue, il peut déclencher repeindre la totalité de l'écran. Activer "Afficher les mises à jour d'écran" dans les DevTools dans le simulateur et voir ce qui est repeint.
OriginalL'auteur JBM
Dans le cas d'une ImageView, voici un moyen de l'atteindre:
.setAlpha((float)1.0)
(pour sdk 11) ou.setAlpha(100)
(pour sdk de 11 ans et moins). La raison que je demande, c'est parce que im réglage de l'opacité pour atteindre cet objectif, et si je peux appeler ça et si son plus compatibles, ce serait génial.je pense que si vous utilisez setAlpha, c'est mieux , car il pourrait être GPU optimisé. bien sûr, j'ai peut-être tort sur ce point. la meilleure chose devrait être de toujours utiliser les nouvelles fonctions de l'API.
OriginalL'auteur android developer
Je voudrais faire quelque chose comme ceci:
Utilisation de la couleur noire avec quelques alpha comme
0x7f000000
pour un assombrissement.C'est plus concis et vous pouvez également assombrir l'
View
avec l'animation ou le défilement de l'événement par exemple. Juste mettreColor.argb(alpha, 0, 0, 0)
que la couleur et l'animeralpha
, ou de l'adapter en fonction de la vitesse de défilement de l'offset.OriginalL'auteur Ashkan Sarlak
C'est comment j'ai fini par le faire. La clé est d'utiliser une Peinture avec son jeu alpha à ce que je voulais.
OriginalL'auteur Thunder Rabbit
Ajoutant à android du développeur réponse:
vous pouvez setColorFilter sur tout afficher comme ceci:
OriginalL'auteur lxknvlk
vous pouvez essayer d'utiliser l'Alpha de l'animation comme ça (peut-être sur le rectangle):
Qui provoquerait le rectangle de devenir opaque plus de 350 secondes...
OriginalL'auteur Alexandru Cristescu
Vous devriez vérifier iPaulPro réponse dans cette question. Vous aurez besoin d'étendre
ImageView
et remplacer leonDraw()
méthode.En fonction de ce que vous allez faire, Alexandru Cristescu la réponse est aussi valable, mais vous devriez
appel setFillAter(vrai) pour l'animation de persister après avoir terminé.
OriginalL'auteur Macarse