自定义TextView

本文介绍了如何自定义一个TextView,使其背景和文字颜色能够随机变化。通过继承TextView,重写onDraw()方法,绘制矩形并设置描边,然后在矩形上添加文字。此外,还实现了点击事件来改变颜色,利用onTouchEvent()监听ACTION_UP,通过boolean变量flag控制颜色状态。
摘要由CSDN通过智能技术生成

最近碰到一个关于自定义TextView的问题,


要求我们对控件的背景和文字进行随机改变,大概思考了32秒,创建了一个类果断继承Textview,把画笔和构造方法都写完后,开始写onDraw()方法,

要求是对背景和文字都有颜色随机变化的要求,所以先绘制了一个矩形


paint.setColor(Color.RED);
            canvas.drawRect(getMeasuredWidth()/2-50,getMeasuredHeight()/2-50,getMeasuredWidth()/2+50,getMeasuredHeight()/2+50,paint);

绘制矩形时,参数分为是float x float y, float x, float y ,画笔
前两个参数我们可以看成是矩形的左上角点的坐标,第三和第四个参数我们可以看成时矩形右下角的坐标
这样一来我们的矩形画完了,接下来就需要给矩形描边(这种变态的要求)
为了和矩形背景色区分开,我们重新定义一下画笔

paint.setStyle(Paint.Style.STROKE);
            paint.setColor(Color.GREEN);
            paint.setStrokeWidth(2);
            canvas.drawRect(getMeasuredWidth()/2-50,getMeasuredHeight()/2-50,getMeasuredWidth()/2+50,getMeasuredHeight()/2+50,paint);



这样一来,矩形的边就出来了,最后就是要在矩形上写文字,

canvas.drawText(s,getMeasuredWidth()/2-50,getMeasuredHeight()/2+20,paint);

第一个参数就是我们要写的内容,这里写的是随机的一个四位数

String.valueOf((int) (Math.random() * 8999 + 1000))

还可以设置字体的大小

paint.setSize(20);

文字的位置根据需求自己进行调整
到这里上图的效果我们已经实现了,接下来操作点击事件进行颜色变化
自定义控件点击,我们用onTouchEvent()


    @Override
    public boolean onTouchEvent(MotionEvent event) {
        //判断当前的点击事件
        if(event.getAction() == MotionEvent.ACTION_UP){
            if(flag){
                flag = false;
            }else {
                flag = true;
            }
            //开始重绘
            invalidate();
        }
        return true;
    }


这里为了偷懒只监听了手指抬起的监听,还可以进行ACTION_DOWN ACTION_MOVE的监听
我们为了可以监听当前的状态,我用了boolean来记录,当flag=true时,这时的颜色都是默认的,当flag值改变时颜色也发生变化
代码都写在onDraw()中




到这里关于自定义TextView的代码就结束,这时候直接去MainActiivty中找到我们自己定义的控件,然后自己确定显示的位置即可完成操作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值