Android 自定义view——签名板


首先来看一下咱酷炫的效果图吧!由于是在模拟器上运行,鼠标拖动操作的,所以写的字较丑,见谅见谅哈!

这个签名板涉及到以下几个知识点:
一、自定义view的制作
二、将布局存成图像并保存



我们来简单说说自定义view:


首先我们要明白,为什么要自定义View?

主要是Android系统内置的View无法实现我们的需求,我们需要针对我们的业务需求定制我们想要的View。自定义View我们大部分时候只需重写两个函数:onMeasure()、onDraw()。onMeasure负责对当前View的尺寸进行测量,onDraw负责把当前这个View绘制出来。当然了,你还得写至少写2个构造函数:

//这个方法的调用环境,例如在activity中,在onCreate()方法里,setContentView(new MyView(this));
//这样直接new自定义的View的时候调用  
 public MyView(Context context) {
        super(context);
    }
//这个方法的调用环境,是在布局文件 XXX.xml 中我们用到这个View时调用,也可以看下面的案例
    public MyView(Context context, AttributeSet attrs) {
        super(context, attrs); 
    }

onMeasure()这个方法也是自定义View需要重写的,

View类的默认处理不满足我们的要求的话,我们就得重写onMeasure函数。我们可以给自己的View定义一个在width和height在wrap_content下一个默认值,如果width为300dp,height为250dp。就应该像以下这么写:

private int getSize(int sizedp,int measureSpec){
        int finalsize = 0;
        int mode=MeasureSpec.getMode(measureSpec);//提取测量模式
        int size = MeasureSpec.getSize(measureSpec);//提取尺寸
        switch (mode){
            case MeasureSpec.AT_MOST://表示子布局限制在一个最大值内,一般为WARP_CONTENT
                finalsize=sizedp*density;
                break;
            case MeasureSpec.EXACTLY://一般是设置了明确的值或者是MATCH_PARENT
                finalsize=size;
                break;
            case MeasureSpec.UNSPECIFIED://没有指定大小,就设为默认大小,表示子布局想要多大就多大,很少使用
                finalsize=sizedp*density;//此处的density我后面会讲到
                break;
        }
        return finalsize;
    }
@Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        setMeasuredDimension(getSize(300,widthMeasureSpec),getSize(250,heightMeasureSpec));
    }


有了默认的大小,我们开始画图。
画图的话要重写View中的onDraw方法:


@Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        mycanvas
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值