09 常見事件響應
阿新 • • 發佈:2017-07-18
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; } }); }
運行結果:
驗證true和false:
當返回值為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 焦點事件。。。。。。。。"); } });
運行的時候,通過點擊tab讓button獲取焦點事件;
日誌打印:
再創建一個button:
通過點擊tab,可以使兩個button間焦點的來回移動:
09 常見事件響應