2010-12-04 5 views
6

यह मैं चाहता हूँ मैं हासिल करना चाहते हैं:एंड्रॉयड हैंडलर समय-समय पर

  1. एक गतिविधि नहीं ClickListener साथ शुरू होता है और चार textviews सब सफेद पृष्ठभूमि

  2. साथ मैं करने के लिए TextView 1 का रंग बदलना चाहते है नीला। 2 सेकंड तक प्रतीक्षा करें और फिर इसे वापस सफेद में बदलें और टेक्स्टव्यू 2 को नीले रंग में बदलें। 2 सेकंड तक प्रतीक्षा करें और फिर इसे वापस सफेद में बदलें ... इसलिए जब तक मैंने टेक्स्टव्यू 4 को नीले रंग में और सफेद पर वापस नहीं किया है।

  3. एक बार यह पूरा होने के बाद, मैं क्लिकलिस्टर जोड़ना चाहता हूं और उपयोगकर्ता इनपुट की प्रतीक्षा करना चाहता हूं।

मैं इसे कैसे प्राप्त कर सकता हूं? मैं एंड्रॉइड के लिए नया हूं लेकिन बिट्स और टुकड़ों को समझता हूं।

उत्तर

1

वहाँ इसके लिए, या एनिमेशन के लिए धागा बनाने की आवश्यकता नहीं है।

समाधान वास्तव में सरल है: Handler.postDelayed() या Handler.sendMessageDelayed() का उपयोग करें:

http://developer.android.com/reference/android/os/Handler.html#postDelayed(java.lang.Runnable, लंबे) http://developer.android.com/reference/android/os/Handler.html#sendMessageDelayed(android.os.Message, लंबे)

एक मजबूत कार्यान्वयन के लिए, किसी भी निकालने का ध्यान रखें कम से कम Message.onDestroy() द्वारा लंबित संदेश। (या यदि आप उन्हें Activity.onStart() में पोस्ट कर रहे हैं, तो उन्हें Activity.onStop() में हटाएं; यदि गतिविधि.ऑनसेसम() में पोस्ट करना है, तो गतिविधि.ऑनपॉज़() में हटाएं।)

+0

हां, हैकबोड, मुझे आपकी विधि पसंद है क्योंकि इसकी संक्षिप्त और गतिविधि में एक धागा है जिसका मैं उपयोग कर सकता हूं। मैं हैंडलर.postDelayed विधि का उपयोग कर रहा हूँ और पहली बार काम करता है। मुझे समझने की जरूरत है कि आप संदेश कैसे भेजते हैं और फिर उस थ्रेड को कॉल करने के लिए संदेश प्राप्त करते हैं? जैसा कि आप देख सकते हैं मैं काफी नया हूँ! – SingleMalt

2

आप या तो XML या जावा कोड में Animation अनुक्रम बनाकर और अनुक्रम में ट्रिगर करके इसे प्राप्त कर सकते हैं। एनीमेशन के अंत में आपको LayoutAnimationController के साथ एनीमेशन अनुक्रम को परिभाषित करने की आवश्यकता होगी, आप क्लिकलिस्टर जोड़ सकते हैं।

डेवलपर लाइफ में good tutorial to get you started on animations है। जेफ के एनिमेशन पर दो भाग वाली ट्यूटोरियल श्रृंखला है - part 1, part 2

आशा इस मदद करता है, indyfromoz

+0

कारण मैं एक नहीं बना सकता एनीमेशन इसलिए है क्योंकि एम ग्रिड गतिशील है। कभी-कभी इसमें 4 टेक्स्ट व्यू और अन्य बार 6 और कभी-कभी 9 और अन्य हो सकते हैं। – SingleMalt

+0

उस स्थिति में, कोड में एनीमेशन अनुक्रम को डिजाइन करना और इसे शुरू करना सबसे अच्छा है जब ग्रिड में सभी दृश्य होते हैं। – indyfromoz

0

मैं इस कार्य के लिए लेकिन handleMessage साथ

import android.app.Activity; 
import android.graphics.Color; 
import android.os.Bundle; 
import android.os.Handler; 
import android.widget.EditText; 
import android.widget.TextView; 

public class l15_threadOneaacto extends Activity { 
    /** Called when the activity is first created. */ 
    TextView tv[]=new TextView[4]; 
    EditText et; 
    Thread bcko; 
    static int index=0; 

    boolean isRunning=false; 
    boolean acceptevent=false; 
    Handler hn=new Handler(){ 
     @Override 
     public void handleMessage(android.os.Message msg) { 
      switch (index) { 
      case 0: tv[0].setBackgroundColor(Color.BLUE); break; 
      case 1: tv[0].setBackgroundColor(Color.WHITE); break; 
      case 2: tv[1].setBackgroundColor(Color.BLUE); break; 
      case 3: tv[1].setBackgroundColor(Color.WHITE); break; 
      case 4: tv[2].setBackgroundColor(Color.BLUE); break; 
      case 5: tv[2].setBackgroundColor(Color.WHITE); break; 
      case 6: tv[3].setBackgroundColor(Color.BLUE); break; 
      case 7: tv[3].setBackgroundColor(Color.WHITE); break; 
      } 
      index++; 
      if(index==8){ 
       acceptevent=true; 
       et=(EditText)findViewById(R.id.bbb); 
       et.setText("ready for input"); 
      } 

     }; 

    }; 


    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     tv[0]=(TextView)findViewById(R.id.tx1); 
     tv[1]=(TextView)findViewById(R.id.tx2); 
     tv[2]=(TextView)findViewById(R.id.tx3); 
     tv[3]=(TextView)findViewById(R.id.tx4); 





    } 




    @Override 
    protected void onStart() { 
     // TODO Auto-generated method stub 
     super.onStart(); 

     bcko=new Thread (new Runnable() { 

      @Override 
      public void run() { 
       try { 

         // 
         for(int i=0;i<8 && isRunning;i++){ 
          Thread.sleep(2000); 
         hn.sendMessage(hn.obtainMessage()); 
         } 

       } catch (Exception e) { 
        // TODO: handle exception 
       } 

      } 
     }); 
     isRunning=true; 
     bcko.start(); 



    } 
    @Override 
    protected void onStop() { 
     // TODO Auto-generated method stub 
     super.onStop(); 
     isRunning=false; 
    } 
} 

kayout धागा द्वारा एक नमूना है:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    > 
<TextView 
    android:id="@+id/tx1" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:background="#FFFFFFFF" 
    android:text="" 
    /> 
    <TextView 
    android:id="@+id/tx2" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:background="#FFFFFFFF" 
    android:text="" 
    /> 
    <TextView 
    android:id="@+id/tx3" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:background="#FFFFFFFF" 
    android:text="" 
    /> 
    <TextView 
    android:id="@+id/tx4" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:background="#FFFFFFFF" 
    android:text="" 
    /> 
    <EditText 
    android:id="@+id/bbb" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="not ready " 
    /> 
</LinearLayout> 

गुड लक,

+1

धागा बनाना संभवतः इस विषय पर बनाम एनीमेशन जाने का तरीका है। इसके अतिरिक्त, आपको एक ऐसी विधि बनाने की आवश्यकता होगी जो अंततः आपके ऑनक्लिकलिस्टर्स बनायेगी। आपके धागे को इस विधि के लिए एक हैंडल की आवश्यकता होगी। – user432209

+0

धन्यवाद मोहम्मद और उपयोगकर्ता 43220 9। हालांकि, हैकबोड जवाब बेहतर लगता है। – SingleMalt