Search code examples
androidbuttonandroid-widgetvisibleontouchlistener

Android display a button with OnTouchListener


I have a button that disappears 3 seconds after I press on it. I would like to make it visible again by touching the screen.

public class MainActivity extends Activity {

    Runnable buttonRunnable;
    Handler buttonHandler = new Handler();

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        final Button button=(Button)findViewById(R.id.myButton);
        buttonRunnable = new Runnable() {
            public void run() {
                button.setVisibility(View.GONE);

            }
        };

        button.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {   

                buttonHandler.postDelayed(buttonRunnable, 3000);
            }
        });
    }



private OnTouchListener buttonOnTouchListener = new OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {

            final Button button=(Button)findViewById(R.id.myButton);
            final LinearLayout linearLayout=(LinearLayout)findViewById(R.id.myLinearLayout);

            linearLayout.setClickable(true);
            linearLayout.setOnClickListener(new OnClickListener() { 
                public void onClick(View view) {   

                    button.setVisibility(View.VISIBLE);
                }
            });
            return true;
        }

    };

}

I am able to hide the button after 3 seconds but I cannot make it visible again.


Solution

  • I have fixed the problem:

    public class MainActivity extends Activity{
    
        Runnable buttonRunnable;
        Handler buttonHandler = new Handler();
    
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            final LinearLayout linearLayout=(LinearLayout)findViewById(R.id.myLinearLayout);
            final Button button=(Button)findViewById(R.id.myButton);
            buttonRunnable = new Runnable() {
                public void run() {
                    button.setVisibility(View.INVISIBLE);
    
                }
            };
    
            button.setOnClickListener(new View.OnClickListener() {
                public void onClick(View view) {   
    
                    buttonHandler.postDelayed(buttonRunnable, 3000);
                }
            });
    
            linearLayout.setOnTouchListener(buttonOnTouchListener);
        }
    
        private OnTouchListener buttonOnTouchListener = new OnTouchListener() { 
            @Override
            public boolean onTouch(View v, MotionEvent event) {
    
                final Button button=(Button)findViewById(R.id.myButton);
                button.setVisibility(View.VISIBLE);
                return true;
            }
        };
    }