Подтвердить что ты не робот

Скрыть макет после 10 секунд в Android?

У меня есть макет, отображаемый при нажатии кнопки. Я хочу скрыть этот макет через 10 секунд.

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    mVolHandler = new Handler();
    mVolRunnable = new Runnable() {
        public void run() {
            mVolLayout.setVisibility(View.GONE);
        }
    };
}


private OnTouchListener mVolPlusOnTouchListener = new OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        mVolLayout.setVisibility(View.VISIBLE);
        mVolHandler.postDelayed(mVolRunnable, 10000);
    }
}
4b9b3361

Ответ 1

Используйте Handler и Runnable.

Вы можете задержать Runnable с помощью postDelayed обработчика.

Runnable mRunnable;
Handler mHandler=new Handler();

mRunnable=new Runnable() {

            @Override
            public void run() {
                // TODO Auto-generated method stub
                yourLayoutObject.setVisibility(View.INVISIBLE); //If you want just hide the View. But it will retain space occupied by the View.
                yourLayoutObject.setVisibility(View.GONE); //This will remove the View. and free s the space occupied by the View    
            }
        };

Теперь внутри события onButtonClick вы должны сообщить обработчику запустить runnable через X миллисекунд:

mHandler.postDelayed(mRunnable,10*1000);

Если вы хотите отменить это, вы должны использовать mHandler.removeCallbacks(mRunnable);

Обновление (согласно отредактированному вопросу) Вам просто нужно удалить обратные вызовы из Handler с помощью removeCallbacks()

Итак, просто обновите свой код внутри метода onTouch следующим образом:

mVolLayout.setVisibility(View.VISIBLE);
mVolHandler.removeCallbacks(mVolRunnable);
mVolHandler.postDelayed(mVolRunnable, 10000);

Ответ 2

Вы можете использовать Animation, когда вы нажимаете кнопку, с 10-секундной продолжительностью, которая уменьшает макет и, вероятно, устанавливает его видимость до GONE в конце.

Ответ 3

Используйте Handler для скрытия макета через 10 секунд. Использовать метод post posteded

Ответ 4

    public void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    pd=ProgressDialog.show(this,"","Loading, Please wait .. ",true);

    setTitle("set title");
    final Handler uiThreadCallback=new Handler();
    final Runnable runInUIThread= new Runnable(){
        public void run(){
            fnDraw();
            pd.dismiss();

        }
    }; 
    new Thread(){
        @Override public void run(){
            uiThreadCallback.post(runInUIThread);
        }
    }.start();
}
public void fnDraw(){
    setContentView(R.layout.define ur xml if any);
    i1=(ImageView)findViewById(R.id.i1);
    t1=(TextView)findViewById(R.id.t1);
    t2=(TextView)findViewById(R.id.t2);

    timerRegister=new Timer();
    lIteration=0;
    checkTime=new TimerTask(){
        public void run(){
            if(lIteration==1){
                timerRegister.cancel();
                uiDrawThreadCallback.post(runInUIDrawThread);
            }
            lIteration++;
            return;
        }
    };
    timerRegister.scheduleAtFixedRate(checkTime,0,10000);
}
final Handler uiDrawThreadCallback=new Handler();
final Runnable runInUIDrawThread= new Runnable(){
    @Override
    public void run(){
        fnDrawAgain();
    }
};
public void fnDrawAgain(){
    Intent intent=new Intent(this,new class you want to open.class);
    startActivity(intent);
}

}

попробуйте, конечно, он будет работать в ур на экране создания

Ответ 5

Следующий фрагмент кода скрывает ваш макет за 3 секунды. Вы можете изменить время, изменив константу, которую я предоставил здесь для задержки.

         private void HideLayout() {

     final View view=volume_control_layout;
     view.postDelayed(new Runnable() {

        public void run() {
            if(!volume_controller.isPressed())
            {
            view.setVisibility(View.INVISIBLE);
            }
            else
            {
                HideLayout();
            }
        }
    }, 3000); // (3000 == 3secs)

    }

Ответ 6

ни одно из приведенных выше не является хорошим решением. Представьте, что представление не видно через 10 секунд (например, оно было прокручено вниз), поэтому Visibility.GONE не будет работать над ним. Я все еще ищу решения