自定义TextView

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

自定义TextView_第1张图片

要求我们对控件的背景和文字进行随机改变,大概思考了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_第2张图片


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

你可能感兴趣的:(AndroidStudy)