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)中执行。

 

第四天晚结束。

你可能感兴趣的:(android)