View类用法详解 介绍Android图形显示基类 Android游戏开发

  次阅读 来源:互联网(转载协议) 2016-01-19 12:02 我要评论(0)

在上一节View类与SurfaceView类中,讲解了View类和SurfaceView类的区别。本节将详解View类的用法,从View类开始着重的介绍Android图形显示基类的相关方法和注意点。

View类常用方法

自定义View的常用方法:

onFinishInflate() 当View中所有的子控件均被映射成xml后触发

onMeasure(int, int) 确定所有子元素的大小

onLayout(boolean, int, int, int, int) 当View分配所有的子元素的大小和位置时触发

onSizeChanged(int, int, int, int) 当view的大小发生变化时触发

onDraw(Canvas) view渲染内容的细节

onKeyDown(int, KeyEvent) 有按键按下后触发

onKeyUp(int, KeyEvent) 有按键按下后弹起时触发

onTrackballEvent(MotionEvent) 轨迹球事件

onTouchEvent(MotionEvent) 触屏事件

onFocusChanged(boolean, int, Rect) 当View获取或失去焦点时触发

onWindowFocusChanged(boolean) 当窗口包含的view获取或失去焦点时触发

onAttachedToWindow() 当view被附着到一个窗口时触发

onDetachedFromWindow() 当view离开附着的窗口时触发,Android123提示该方法和onAttachedToWindow() 是相反的。

onWindowVisibilityChanged(int) 当窗口中包含的可见的view发生变化时触发

以上是View实现的一些基本接口的回调方法。

View类方法的重载

一般我们需要处理画布的显示时,重写onDraw(Canvas)用的的是最多的:

@Override

protected void onDraw(Canvas canvas) {

//这里我们直接使用canvas对象处理当前的画布,比如说使用Paint来选择要填充的颜色

Paint paintBackground = new Paint();

paintBackground.setColor(getResources().getColor(R.color.xxx));//从Res中找到名为xxx的color颜色定义

canvas.drawRect(0, 0, getWidth(), getHeight(), paintBackground); //设置当前画布的背景颜色为paintBackground中定义的颜色,以0,0作为为起点,以当前画布的宽度和高度为重点即整块画布来填充。具体的后面会讲,在Canvas中我们可以实现画路径,图形,区域,线。而Paint作为绘画方式的对象可以设置颜色,大小,甚至字体的类型等等。

}

当然还有就是处理窗口还原状态问题(一般用于横竖屏切换),除了在Activity中可以调用外,开发游戏时我们尽量在View中使用如下代码

@Override

protected Parcelable onSaveInstanceState() {

Parcelable p = super.onSaveInstanceState();

Bundle bundle = new Bundle();

bundle.putInt("x", pX);

bundle.putInt("y", pY);

bundle.putParcelable("android_state", p);

return bundle;

}

@Override

protected void onRestoreInstanceState(Parcelable state) {

Bundle bundle = (Bundle) state;

dosomething(bundle.getInt("x"), bundle.getInt("y")); //获取刚才存储的x和y信息

r.onRestoreInstanceState(bundle.getParcelable("android_state"));

return;

}

在View中如果需要强制调用绘制方法onDraw,可以使用invalidate()方法,它有很多重载版本,同时在线程中的 postInvailidate()方法在后面的教程中会讲到。

本站文章信息来源于网络以及网友投稿,本站只负责对文章进行整理、排版、编辑,是出于传递更多信息之目的,并不意味着赞同其观点或证实其内容的真实性。如果您有什么意见或建议,请联系QQ28-1688-302!

人工智能实验室
相关文章相关文章
  • 马云的新零售?张近东的智慧零售?抑或是刘强东的第四次零售革命?

    马云的新零售?张近东的智慧零售?抑或是刘强东的第四次零售革命?

  • 区块链最近太火,但A股多家公司明确表态不考虑涉足

    区块链最近太火,但A股多家公司明确表态不考虑涉足

  • 汤晓鸥:人工智能的中国式文艺复兴

    汤晓鸥:人工智能的中国式文艺复兴

  • 全球陷入"区块链狂热"潮,大规模应用还需等待

    全球陷入"区块链狂热"潮,大规模应用还需等待

网友点评网友点评
阅读推荐阅读推荐

算法 任何一个入门的软件开发人员都会听到这句话:算法是软件的灵魂!近年来大火的机器学习即是在算法在人工智能上的集中体现。今日头条通...

据《日本经济新闻》报道,日本东京大学教授稻叶雅幸等人开发出再现日本人骨骼肌肉构造的机器人。机器人各部位的肌肉和骨骼长度与日本人的平...

以奥黛丽-赫本为原型打造的人形机器人索菲娅首次拜访了印度。索菲娅是世界上首位获得公民身份的机器人,她在12月30日出现在了印度理工学院...

在查获现场,代售点电脑旁的一台机器人通过敲击电脑键盘抢票。 广州日报惠州讯 (全媒体记者秦仲阳 通讯员张中铃摄影报道)2018年春运售票已...