自定义控制01

自定义控件的使用

构造方法的使用:

(1)/**
 * 在代码里面创建对象时进行使用此构造方法
 *   当不需要使用xml声明或者不需要使用inflate动态加载时候,实现此构造函数即可  
 * @param context 上下文
 */
public CircleView(Context context) {
    super(context);

}
(2)
/**
 * 在布局文件中声明view, 创建时由系统自动调用
 *  当需要在xml中声明此控件,则需要实现此构造函数。并且在构造函数中把自定义的属性与控件的数据成员连接起来。  
 * @param context 上下文
 * @param attrs   属性
 */
public CircleView(Context context, AttributeSet attrs) {
    super(context, attrs);

}
(3)/**
 * 接受一个style资源  
 * @param context 上下文
 * @param attrs  属性
 * @param defStyleAttr  样式属性
 */
public CircleView(Context context, AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);

}

继承view并重写onDraw()方法的使用常见的一些问题:在绘制控件时候调用,控件具体长什么样子就在此方法中实现

1、wrap_content的问题解决:如果不对wrap_content进行处理时,它的wrap_content属性和match_parent属性相同,没有任何区别。
解决办法:只需要指定wrap_content模式的宽/高,比如可以选择200dp作为默认的宽/高。

2、padding问题的处理办法:在绘制的时候,考虑一下padding即可,考虑四周的空白,代码如下:

final int paddingLeft = getPaddingLeft();
final int paddingRight = getPaddingLeft();
final int paddingTop = getPaddingLeft();
final int paddingBottom = getPaddingLeft();
//得到宽
int width = getWidth()-paddingLeft-paddingRight;
//得到高
int height = getHeight()-paddingTop-paddingBottom;
//得到半径
int radius = Math.min(width, height) / 2;
canvas.drawCircle(paddingLeft+width/2,paddingTop+height/2,radius,mPaint);

3、(1)自定义属性的实现:在values资源文件中创建一个attr.xml,代码如下:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值