自定义View

介绍自定义View前先介绍何为View?

视图组件(View)

Android中view类是最基本的UI类,高级UI组件继承View类而实现的,这里的UI是指user interface,即用户界面。我们使用的TextView,Button,List,EditText,RadioButton等都是View类。

一个View在屏幕中占据了一块矩形区域,它负责渲染这块矩形区域(如改变这块区域的颜色),也可以处理这块矩形区域发生的事件(如用户单击了这块区域),可以设置这块区域是否可见,是否可以获取焦点。

Android API中对View的解释如下:

This class represents the basic building block for user interface components. A View occupies a rectangular area on the screen and is responsible for drawing and event handling. View is the base class for widgets, which are used to create interactive UI components (buttons, text fields, etc.). The ViewGroup subclass is the base class for layouts, which are invisible containers that hold other Views (or other ViewGroups) and define their layout properties.  

自定义View前我们需要知道为什么要自定义View?Android既然提供了相应的控件为什么还要自找麻烦的去自定义View?

其实在Android中,系统给我们提供了许多很不错的风格,但是有时候还是需要满足特定的风格,处理特有的用户交互,优化布局和封装,这些都需要我们采取自定义View。

如何自定义View呢?

1.自定义属性的声明与获取

1.1分析需要的自定义属性

1.2在res/values/attrs.xml定义声明

1.3在layout的xml文件中定义声明

1.4在View的构造方法中进行获取。而获取主要是通过context.obtainstyled Attributes(),获取完成后记得recycle.


2.测量OnMeasure

测量的模式分三个:

①EXACTLY:明确的值(如100dp)

②AT_MOST:至多不能超过某值(wrap_content)

③UNSPECIFIED:不限制;主要在ScrollView和ListView中。

下面是API中关于onMeasure方法的说明


3.布局onLayout(ViewGroup)

3.1决定子view的位置

3.2尽可能将onMeasure中一些操作移动到此方法中

3.3requestLayout()用来触发


4.绘制onDraw

4.1绘制内容区域

4.2invalidate,postInvalidate()

4.3Canvas.drawxxx

4.4 translate、rotate、scale、skew

4.5 save()、restore()


5.onTouchEvent

5.1 ACTION_DOWN

     ACTION_MOVE

     ACTION_UP

5.2ACTION_POINTER_DOWN

     ACTION_POINTER_UP

5.3 parent.requestDisallow-InterceptTouchEvent(true)

5.4 velocityTracker

下面看看Android API中对onTouchEvent的介绍


6.onInterceptTouchEvent(ViewGroup)

6.1 ACTION_DOWN

      ACTION_MOVE

      ACTION_UP

6.2 ACTION_POINTER_DOWN

      ACTION_POINTER_UP

6.3决定是否拦截手势




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值