Android Handler Periodically

前端 未结 3 708
清歌不尽
清歌不尽 2021-01-12 15:22

This I want I want to achieve:

  1. An activity starts with no ClickListener and has four textviews all with white background

  2. I want to change th

相关标签:
3条回答
  • 2021-01-12 15:32

    There is no need to create a thread for this, or animations.

    The solution is really simple: use Handler.postDelayed() or Handler.sendMessageDelayed():

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

    For a robust implementation, be sure to remove any pending messages at least by Activity.onDestroy(). (Or if you are posting them in Activity.onStart(), remove them in Activity.onStop(); if posting in Activity.onResume(), remove in Activity.onPause().)

    0 讨论(0)
  • 2021-01-12 15:35

    I have one sample for this task but by thread with 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>
    

    Good luck,

    0 讨论(0)
  • 2021-01-12 15:42

    You can achieve this by creating Animation sequences, in either XML or Java code, and triggering them in sequence. You will need to define a animation sequence with LayoutAnimationController, at the end of the animation, you can add the ClickListener.

    Developer Life has a good tutorial to get you started on animations. Jeff has a two-part tutorial series on animations - part 1, part 2.

    Hope this helps, indyfromoz

    0 讨论(0)
提交回复
热议问题