android第四天晚:绘图和handle

视频:善知堂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)中执行。

 

第四天晚结束。

posted on 2012-07-05 23:16  DON'T PANIC  阅读(415)  评论(0编辑  收藏  举报

导航