Search code examples
androidandroid-imageviewrunnable

Android change visibility doesn't work


Simple card game setup creating rows and columns number of cards:

    TableLayout tableCards = new TableLayout(this);
    RelativeLayout.LayoutParams relLayParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT,
            RelativeLayout.LayoutParams.WRAP_CONTENT);
    relLayParams.addRule(RelativeLayout.CENTER_IN_PARENT);

    tableCards.setLayoutParams(relLayParams);

    int i = 0;
    StringBuilder sbCardsDebug = new StringBuilder('\n');
    for (int r = 0; r < rows; r++) {
        // create a new row
        TableRow tr = new TableRow(this);
        tr.setLayoutParams(new TableLayout.LayoutParams(TableLayout.LayoutParams.WRAP_CONTENT, TableLayout.LayoutParams.WRAP_CONTENT));

        for (int c = 0; c < columns; c++) {
            ImageView card = new ImageView(this);
            card.setTag("" + i);
            card.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.WRAP_CONTENT));

            card.setImageDrawable(bitmapCardBackScaled);

            tr.addView(card);

            card.setOnClickListener(cardClickListener);

            i++;
        }

        // add the row:
        tableCards.addView(tr);

    }

    relativeLayoutCardsHolder.addView(tableCards);

Somewhere in the listener I have a code part like this:

                imageView.setVisibility(View.INVISIBLE);

Where the imageView is a card ( I have breakpoint set up also log and it shows the correct card.

The problem: it doesn't become invisible.

I am thinking maybe I am not in a good Thread or should I need something to do it after setting the invisible?

I have tried with :

        imageView.post(new Runnable() {

            public void run() {
                imageView.setVisibility(View.INVISIBLE);
            }
        });

and

                TableLayout parent = (TableLayout) imageView.getParent().getParent();
                parent.invalidate();
                parent.requestLayout();

and no success. Pls make any suggestion, I am out of ideas, thanks.

Edit1:

As suggestion I have tried with postDelayed too:

        imageView.postDelayed(new Runnable() {

            public void run() {
                imageView.setVisibility(View.INVISIBLE);
            }
        }, 600);

Listener body is from line 353 to 424 calling several classes with animations, passing references and it will reveal my dirty work, also will show the business logic too (NDA agrement), which part are you interested? - min 1000 lines are executed.


Solution

  • If it's a correct ImageView, its must work.

    imageView.setAlpha(0);
    

    Hope it's help.