视频:善知堂Android http://www.verycd.com/topics/2915940/
今天又加班两个多小时。
1.查看日志的过滤,这里过滤出来System.out 的输出日志
2.添加监听事件。
谁处于激活状态就有限获得这个事件,事件会向上传递。
举个例子
class GameView extends View { public GameView(Context context) { super(context); } // 键盘按下 @Override public boolean onKeyDown(int keyCode, KeyEvent event) { this.setFocusable(true);//设置为活动窗口 return true;//这样事件不会向上传递。 } // 触摸 @Override public boolean onTouchEvent(MotionEvent event) { //向上传递。 return super.onTouchEvent(event); } }
加入这样一句话就取消了退出功能了
@Override public boolean onKeyDown(int keyCode, KeyEvent event) { System.out.println("keydown"); switch (keyCode) { case KeyEvent.KEYCODE_BACK:// 证明输入的是返回 System.out.println("back"); break; } return true;//这个地方是重点 }
第六集 需要注意的问题
1.触摸的状态
// 触摸 @Override public boolean onTouchEvent(MotionEvent event) { event.getAction();//这个是获取点击状态,按下,拖动,放开。 return super.onTouchEvent(event); }
2.让某个View先获得焦点,可在View的执行代码中加入
this.setFocusable(true);
还可以在获得焦点的窗体事件中执行
myView.onKeyDown(keyCode, event);//将事件传给myView
super.onKeyDown(keyCode, event);//调用父窗体的
在点击事件中,如果不创建线程,则程序就只有一个主线程来执行多有操作。
主线程负责重回UI,所以主线程不能长时间循环。
在键盘事件中,加入for(1->100){sleep(100)} 会卡死.如果变成多线程的就没有任何影响。
还包括各种事件,重绘,都不能出现长循环。
3.handle
Handler运行在主线程中(UI线程中), 它与子线程可以通过Message对象来传递数据.
在主线程有消息队列。
handle ,draw,按键 都在在主线程(UI)中执行。
第四天晚结束。