Android群英传笔记-->第三章1,对现有控件进行扩展

通常情况下使用三种方法来实现控件

1.对现有的控件进行扩展
2.通过组合来实现新的控件
3.称谢view 来实现全新的控件

通过对TextView实例来实现对现有组件进行扩展

我们可以在onDraw()方法中对原生控件行为进行扩展

效果图

须知:
要想实现这个效果,原生的TextView使用onDraw()绘制要显示的文字,当基础了系统的
TextView后如果不重写其onDraw()方法,则不会修改TextView的任何效果
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
}

程序调用super.onDraw(canvas)方法来实现原生的控件功能,但是在调用super.onDraw(canvas)方法之前和之后我们都可
以实现自己的逻辑,分别在绘制文件前的绘制文件后

实现步骤:

1.新建一个类如TextViewTest,让它继承TextView,

2.在构造方法中初始化画笔属性

 Paint mPaint1;
    Paint mPaint2;

    public TextViewTest(Context context, AttributeSet attrs) {
        super(context, attrs);
        //画笔1
        mPaint1 = new Paint();
        mPaint1.setColor(getResources().getColor(android.R.color.holo_blue_light));
        mPaint1.setStyle(Paint.Style.FILL);
        //画笔2
        mPaint2 = new Paint();
        mPaint2.setColor(Color.YELLOW);
        mPaint2.setStyle(Paint.Style.FILL);
    }

3.在onDraw方法种实现效果

代码中最重要的部分则是在onDraw()中,为了改变原生的绘制行为,在系统调用super.onDraw(canvas);方法之前,也就是在
绘制文字之下,会绘制两个不同大小的矩形,形成重叠效果,再让系统调用super.onDraw(canvas),执行绘制工作。

//画图

    @Override
    protected void onDraw(Canvas canvas) {
        //在回调父类方法前,实现自己的逻辑,对textview来说既是在绘制文本内容前
        //绘制外层矩阵
        canvas.drawRect(0, 0, getMeasuredWidth(), getMeasuredHeight(), mPaint1);
        //绘制内层矩阵
        canvas.drawRect(10, 10, getMeasuredWidth() - 10, getMeasuredHeight() - 10, mPaint2);
        canvas.save();
        //绘制文字向右平移10像素
        canvas.translate(10, 0);

        super.onDraw(canvas);
        //在回调父类方法后,实现自己的逻辑,对textview来说既是在绘制文本内容后
        canvas.restore();


    }

4.更改xml文件

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:custom="http://schemas.android.com/apk/res-auto"

    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="cn.sss.androidqunyinzhuan3.MainActivity">
   <cn.sss.androidqunyinzhuan3.TextViewTest
       android:text="Android"
       android:gravity="center"
       android:layout_width="match_parent"
       android:layout_height="40dp" />
</RelativeLayout>

在主活动中调用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值