Android学习之自定义view

自定义控件的步骤:

一、自定义属性的声明与获取:

分析需要的自定义属性;

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

<declare-styleable name = "*****">
    <attr name = "icon"></attr>
</declare-styleable >

在layout xml文件中进行使用;

在view的构造方法中进行获取:

通过TypeArray a  = context.obtainStyledAttributes(attrs,R.styleable.*****)获取,a.getIndexCount()、a.getIndex(i)遍历获取,最后a.recycle()

二、测量onMeasure ,

测量模式:EXACTLY 明确的值, AT_MOST控件最大至多不能超过某个值, UNSPECIFIED 没有限制  eg:scrollview

MeasureSpec类,判断模式

setMeasuredDimension传入值

requestLayout()

三、布局onLayout(ViewGroup),

如果是ViewGroup需要通过onLayout设置子view的位置

决定子view的位置;

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

requestLayout()

四、绘制onDraw,

绘制内容区域;

invalidate(),postInvalidate();

Canvas.draw****;

translate,rotate,scale,skew;

save(),restore();

五、onTouchEvent,

用户交互,多指触控:ACTION_DOWN  ACTION_MOVE  ACTION_UP;

ACTION_POINTER_DOWN ACTION_POINTER_UP   

parent.requestDisallow-InterceptTouchEvent(true);

VelocityTracker

六、onInterceptTouchEvent(ViewGroup)

ACTION_DOWN ACTION_MOVE ACTION_UP

ACTION_POINTER_DOWN ACTION_POINTER_UP   

决定是否拦截该手势

总结

一般自定义View都需要进行这几个步骤,首先可以自定义一些自己的属性,在res/values/attrs.xml里面定义,然后在layout中使用,在View中通过context.obtainStyledAttributes(attrs,R.styleable.自定义属性的名字)进行获取。
然后在测量onMeasure,一般通过他的三个模式(EXACTLY,AT_MODE,,UNSPECIFIED)进行测量,调用setMeasuredDimension进行传入设置的值。
接着如果是ViewGroup 的话我们还需要设置下子View的位置,一般是通过requestLayout去触发onLayout的方法的。
最后在onDraw里面通过Canvas的一些方法进行绘制。
如果需要进行触摸事件的话,一般需要有实现onTouchEvent事件,注意,如果需要多点触摸,需要实现ACTION_POINTER_DOWN和ACTION_POINTER_UP进行处理。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值