1. 程式人生 > >09 常見事件響應

09 常見事件響應

mar idt -1 lib onclick mil type log move

常見的事件:

1、單擊事件onClickListener:略


2、長按事件onLongClickListener

ThreeAndroidActivity.java:

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Button button1 =(Button)findViewById(R.id.button1);
        button1.setOnLongClickListener(new OnLongClickListener(){
			public boolean onLongClick(View v) {
				Log.i("myinfo", "button長按事件。。。");
				return false;
			}
        });
}

運行結果:

技術分享

驗證truefalse

當返回值為true時:

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Button button1 =(Button)findViewById(R.id.button1);
        button1.setOnLongClickListener(new OnLongClickListener(){
            
public boolean onLongClick(View v) { Log.i("myinfo", "button長按事件。。。"); return true; } }); button1.setOnClickListener(new OnClickListener(){ public void onClick(View v) { Log.i("myinfo", "button點擊事件。。。"); } }); }

運行結果:

技術分享

當返回值為false時:

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Button button1 =(Button)findViewById(R.id.button1);
        button1.setOnLongClickListener(new OnLongClickListener(){
            public boolean onLongClick(View v) {
                Log.i("myinfo", "button長按事件。。。");
                return false;
            }
        });
        
        button1.setOnClickListener(new OnClickListener(){
            public void onClick(View v) {
                Log.i("myinfo", "button點擊事件。。。");
            }
        });
}

運行結果:

長按button->

技術分享

點擊長按的時候回觸發點擊事件

所以通過長按事件中的返回true可以控制長按事件的傳播;


3、滑動事件onTouchListener

        button1.setOnTouchListener(new OnTouchListener(){
            public boolean onTouch(View v, MotionEvent event) {
                // event對象記錄了事件發生的現場情況
                int actionType=event.getAction();
                if(actionType==MotionEvent.ACTION_DOWN){
                    Log.i("myinfo", "touch 按下。。。。");
                }else if(actionType==MotionEvent.ACTION_MOVE){
                    Log.i("myinfo", "touch 移動。。。。");
                }else if(actionType==MotionEvent.ACTION_UP){
                    Log.i("myinfo", "touch 松開。。。。");
                }else{
                }
                return true;
            }
            
        });

運行結果:

技術分享

小案例(用鼠標移動控制button的位置):

main.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" 
    android:id="@+id/layout01"
    >

ThreeAndroidActivity.java:

public class ThreeAndroidActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        final Button button1 =(Button)findViewById(R.id.button1);
            ViewGroup viewGroup=(ViewGroup)findViewById(R.id.layout01);
            viewGroup.setOnTouchListener(new OnTouchListener(){

                public boolean onTouch(View v, MotionEvent event) {
                    int actionType=event.getAction();
                    if(actionType==MotionEvent.ACTION_DOWN){
                        Log.i("myinfo", "touch 按下。。。。");
                    }else if(actionType==MotionEvent.ACTION_MOVE){
                        Log.i("myinfo", "touch 移動。。。。");
                        button1.setX(event.getX());
                        button1.setY(event.getY());
                    }else if(actionType==MotionEvent.ACTION_UP){
                        Log.i("myinfo", "touch 松開。。。。");
                    }else{
                    }
                    return true;
                }
            });
    }
}

運行結果:(鼠標點擊到哪裏,button按鈕就到哪裏)button隨著鼠標的移動而移動。

技術分享


4、鍵盤事件onKeyListener

ThreeAndroidActivity .java:

public class ThreeAndroidActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        final Button button1 =(Button)findViewById(R.id.button1);
        button1.setOnKeyListener(new OnKeyListener(){

            public boolean onKey(View v, int keyCode, KeyEvent event) {
                System.out.print(keyCode);
                return false;
            }
            
        });
    }
}

運行結果:

技術分享

輸出鍵盤中的按鈕的ASCII

小案例:通過awsd來控制button的位置:

ThreeAndroidActivity .java:

        button1.setOnKeyListener(new OnKeyListener(){
            public boolean onKey(View v, int keyCode, KeyEvent event) {
                //a:29; d:32; w:51;  s:47;
                if(29==keyCode){
                    button1.setX(button1.getX()-20);
                }else if(32==keyCode){
                    button1.setX(button1.getX()+20);
                }else if(51==keyCode){
                    button1.setY(button1.getY()-20);
                }else if(47==keyCode){
                    button1.setY(button1.getY()+20);
                }else {
                }
                return false;
            }
            
        });

5、焦點事件setOnFocusChangeListener

        button1.setOnFocusChangeListener(new OnFocusChangeListener(){

            public void onFocusChange(View v, boolean hasFocus) {
                Log.i("myinfo", "button   焦點事件。。。。。。。。");
            }
        });

運行的時候,通過點擊tabbutton獲取焦點事件;

技術分享

日誌打印:

技術分享

再創建一個button:

技術分享

通過點擊tab,可以使兩個button間焦點的來回移動:

技術分享

09 常見事件響應