android构建自定义的视图组件

  次阅读 作者:智能小宝 来源:互联网 2016-01-14 09:50 我要评论(0)

Android提供了精巧和有力的组件化模型构建用户的UI部分。主要是基于布局类:View和ViewGroup。在此基础上,android平台 提供了大量的预制的View和ViewGroup子类,即布局(layout)和窗口小部件(widget)。可以用它们构建自己的UI。

如果没有符合你需求的预制窗口小部件,你可以创建自己的视图子类。如果只是对已存在的窗口小部件或者布局做小的调整,只需继承该类,覆盖相关的方法。

创建你自己的View子类可以更精确控制视图元素的外观和功能。

可创建完整的自定义渲染视图类型,比如创建一个2d的控制条;

可将一组视图组件合成为一个新的单一组件,比如双选的列表,选择省和市;

覆盖EditText组件,比如notepad tutorial中的示例;

捕捉其他事件比如按键事件,并执行自定义的处理方式,比如在游戏中。

基本方法

总的来说,创建自定义的视图组件步骤是:

创建自己的类,继承已经存在的View类或者子类;

覆盖超类的一些方法。这些超类的方法一般以 on 开头,比如onDraw()方法等等;

使用新创建的扩展类。一旦完成,你的新扩展类就可以用于所有View使用的地方。

注意:扩展类可以定义为内部类,在你创建的Activity类之中。这很有用,因为这样可以控制外界的访问,但是这不是必须的,因为你可能需要一个public的自定义View类供更广泛的使用。

完全自定义组件

完全自定义的组件可以创建图形组件显示在你需要的任何地方。

步骤如下:

可以继承的最通用的视图类是View,可以继承它创建自定义的组件超类;

可以提供构造方法,并通过xml文件获取属性值和参数;

创建自己的事件监听器,属性访问器和编辑器等等;

一般情况下会覆盖onMeasure()方法和onDraw()方法,这会让组件显示一些东西。如果都用默认的行为,onDraw()方法不做任何事情,onMeasure()方法设置一个100 100的区域;

根据需求覆盖其他on 方法。

扩展onDraw()和onMeasure()方法

onDraw()方法提供给你一个Canvas对象,在它之上可以实现任何你想要的东西,通过2d图形api。比如其他标准的后者自定义的组件,风格化的文字后者其他。

注意:这里不提供3d图形api的支持。如果你需要3d图形支持,必须继承SurfaceView而不是View,并且通过单独的线程画图。可以通过GLSurfaceViewActivity实例查看详细信息。

onMeasure()方法有些麻烦。该方法是在容器和自定义组件之间渲染的重要部分。该方法覆盖,要高效率的和精确的报告被包含区域的测量值。

总的来看,实现onMeasure()方法类似如下步骤:

调用已经覆盖的onMeasure()方法,传递长和宽规范参数;

自定义组件在onMeasure()方法中计算需要渲染的组件的长和宽,应该在规范参数的范围内;

一旦长和宽计算出来,必须调用setMeasuredDimension(int width, int height)方法,这步失败会导致异常的抛出。

一个自定义视图的示例

自定义视图的示例,见:LabelView

该示例演示了一些自定义组件的不同方面:

继承View类,用于完全自定义组件;

参数化的构造方法,提供更多的参数,定义在xml文件中;

标准的公开方法,用于设置标签,比如setText()方法等;

覆盖onMeasure方法确定渲染的组件尺寸;

覆盖onDraw方法,在提供的canvas中画标签。

可以找到对示例的一些使用,在custom_view_1.xml文件中。

该示例运行效果:

android示例是混在一起的,比较乱,我这里改写了一下,只有相关示例的代码和配置。看起来比较简单:

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

人工智能实验室
相关文章相关文章
  • 英国研发“杀生”机器人 通过生命体获取能量

    英国研发“杀生”机器人 通过生命体获取能量

  • 无人驾驶汽车如何改变城市生活?听听他们怎么说

    无人驾驶汽车如何改变城市生活?听听他们怎么说

  • 未来两年人工智能要怎么走?看这篇就够了

    未来两年人工智能要怎么走?看这篇就够了

  • 韩春雨称已能重复实验结果 近期将有消息公布

    韩春雨称已能重复实验结果 近期将有消息公布

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

据国外媒体报道,在过去两年内,聊天机器人(chatbot)、人工智能以及机器学习的研发和采用取得了巨大进展。许多初创公司正利用人工智能和...

霍金 视觉中国 图 英国著名物理学家霍金(Stephen Hawking)再次就人工智能(AI)发声,他认为:对于人类来说,强大AI的出现可能是最美妙的...

文|郑娟娟 今年,人工智能(AI) 60岁了。在AI60岁的时候,笔者想要介绍一下AI100,一个刚刚2岁的研究项目,但它的预设寿命是100年,甚至更长...

AlphaGo与李世石的人机大战,为大众迅速普及了人工智能的概念。 但对谷歌而言,除了下围棋,现在的人工智能进展到哪一步了?未来,人工智能...