2011-11-18 12 views
13

मेरे पास एक बटन क्लिक पर एक लेआउट प्रदर्शित होता है। मैं 10 सेकंड के बाद उस लेआउट को छिपाना चाहता हूं। जब आप के साथ 10 सेकंड की अवधि है कि लेआउट फ़ेड आउट और शायद अंत में GONE को उसकी दृश्यता सेट बटन क्लिक करें,एंड्रॉइड में 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); 
    } 
} 
+0

मैंने हैंडलर का उपयोग करने की कोशिश की है। जब मैं बटन को क्लिक करता हूं तो लेआउट प्रदर्शित होता है और हैंडलर का उपयोग करके इसे 10 सेकंड के बाद छुपाया जाता है। लेकिन समस्या यह है कि जब बटन को लगातार क्लिक किया जाता है तो यह छिपा जाता है यदि बटन फिर से क्लिक किया गया लेआउट प्रदर्शित होता है लेकिन 10 सेकंड से पहले छुपा जाता है। मैं अंतिम उपयोगकर्ता क्लिक से 10 सेकंड के लिए लेआउट प्रदर्शित करना चाहता हूं। – user987362

+0

क्या मुझे कोई अन्य समाधान है? कृपया मेरी मदद करें – user987362

+0

मैंने कोशिश की है कि – user987362

उत्तर

34

उपयोग करें बनाने पर उर में काम करने वाले का प्रयास करें।

आप हैंडलर के postDelayed का उपयोग करके एक रननेबल देरी कर सकते हैं।

mHandler.postDelayed(mRunnable,10*1000); 

आप आप उपयोग करना mHandler.removeCallbacks(mRunnable);

अद्यतन है तो यह रद्द करना चाहते हैं:

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 चलाने के लिए है (संपादित प्रश्न के अनुसार) आपको Handler से removeCallbacks()

का उपयोग करके कॉलबैक को हटाने की आवश्यकता है

तो सिर्फ इस तरह onTouch विधि के अंदर अपना कोड अपडेट:

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

आप एक Animation उपयोग कर सकते हैं शुरू कर दिया।

+0

+1 एक अच्छा समाधान प्रदान करना। हालांकि टाइमर का उपयोग करने से भी उद्देश्य पूरा हो जाएगा .. अगर आपने दिखाया था कि यह वास्तव में कैसे किया गया था तो यह सहायक होगा .. – ngesh

+1

लेआउट बनाना सिर्फ गायब हो गया है, इसलिए मैंने एनीमेशन का सुझाव दिया है। –

0

10 सेकंड के बाद लेआउट छुपाने के लिए हैंडलर का उपयोग करें। पोस्ट उपयोग देरी विधि

0
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); 
} 

}

यह यकीन है कि यह स्क्रीन Handler & Runnable की

1

कोड का निम्न भाग 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) 

    } 
0

उपर्युक्त में से कोई भी अच्छा समाधान नहीं है। कल्पना करें कि दृश्य 10 के बाद दिखाई नहीं दे रहा है (उदाहरण: इसे नीचे स्क्रॉल किया गया था) ताकि दृश्यता। GONE इस पर काम नहीं करेगा। मैं अभी भी एक समाधान की तलाश कर रहा हूं

संबंधित मुद्दे