Encontré cómo change the opacity of a View
, pero realmente necesito oscurecer un View
. Mi mejor idea es colocar un rectángulo negro transparente sobre él y luego aumentar lentamente la opacidad del rectángulo.oscurecer programáticamente a Ver android
¿Conoces una manera más agradable de hacerlo?
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);
}
}
}
El código anterior no está haciendo lo que esperaba. Page07AnimationView
se agrega a un FrameLayout
sobre la vista que necesito oscurecer. R.drawable.black_background
apunta a una imagen png negra de 787px x 492px.
He añadido overlay.setWillNotDraw(false);
pero no sirvió. Cambié el primer setAlpha(0)
a setAlpha(255)
pero eso no ayudó. Quité las llamadas setAlpha()
por completo, pero no sirvió de nada.
Esta técnica básica de agregar un PageNNAnimationView
ha estado trabajando para dibujar Bitmaps
, pero no para dibujar ImageView overlay
. (Yo utilizo Bitmaps
, pero no parecen tener un componente alfa.)
Edit2: este es el padre de la clase anterior:
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
}
}
He confirmado que draw_bitmaps y update_bitmaps están siendo llamados en repetidas ocasiones. –