Znalazłem, jak change the opacity of a View
, ale muszę faktycznie przyciemnić View
. Moim najlepszym pomysłem jest umieszczenie na nim przezroczystego czarnego prostokąta, a następnie powolne zwiększanie krycia prostokąta.Programowo ciemnieje widok Android
Czy znasz lepszy sposób na zrobienie tego?
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);
}
}
}
Powyższy kod nie spełnia moich oczekiwań. Page07AnimationView
został dodany do FrameLayout
nad widokiem, który muszę przyciemnić. R.drawable.black_background
wskazuje na czarny obraz png o wymiarach 787 pikseli x 492 pikseli.
Dodałem overlay.setWillNotDraw(false);
, ale to nie pomogło. Zmieniłem pierwszą setAlpha(0)
na setAlpha(255)
, ale to nie pomogło. Usunąłem wszystkie połączenia setAlpha()
, ale to nie pomogło.
Ta podstawowa technika dodawania obiektu PageNNAnimationView
służy do rysowania Bitmaps
, ale nie do rysowania ImageView overlay
. (Użyłbym Bitmaps
, ale nie wydaje się, że składnik alfa.)
Edit2: jest to dominująca w klasie powyżej:
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
}
}
Ustaliliśmy, że draw_bitmaps i update_bitmaps są nazywane wielokrotnie. –