自定义TextView

转载 2016年08月30日 14:06:17

在View中有一些比较重要的回调方法,但是只需要重写特定的方法

onFinishInflate()//从xml加载组件后回调
onSizeChanged(); //组件大小改变时回调
onMeasure();     //回调该方法来进行测量
onLayout();      //回调该方法来确定显示的位置
onTouchEvent();  //监听到触摸事件时回调

自定义控件的实现方法

方法一:对现有控件进行拓展

public class MyTextView extends TextView {

    private Paint mpaint1;
    private Paint mpaint2;
    private int mViewWidth = 0;  //用于获取整个View的宽度
    private LinearGradient mLinearGradient;
    private Matrix matrix;
    private int mtranslate = 0;  //用于记录渲染的偏移量

    public MyTextView(Context context, AttributeSet attrs) {
        super(context, attrs);

        mpaint1 = new Paint();
        mpaint1.setColor(getResources().getColor(
                android.R.color.holo_blue_light));
        mpaint1.setStyle(Paint.Style.FILL);
        mpaint2 = new Paint();
        mpaint2.setColor(Color.YELLOW);
        mpaint2.setStyle(Paint.Style.FILL);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        //绘制外层矩形
        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);
        canvas.restore();

        if (matrix != null){
            mtranslate += mViewWidth / 5;
            //循环
            if(mtranslate > 2 * mViewWidth){
                mtranslate = -mViewWidth;
            }
            matrix.setTranslate(mtranslate,0);
            mLinearGradient.setLocalMatrix(matrix);
            postInvalidateDelayed(100);
        }
    }

    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        super.onSizeChanged(w, h, oldw, oldh);
        //通过这个条件判断,可以保证只在初始化的时候调用一次
        if (mViewWidth == 0) {
            mViewWidth = getMeasuredWidth();
            if (mViewWidth > 0) {

                //创建渐变渲染器
                mLinearGradient = new LinearGradient(0, 0, mViewWidth, 0,
                        new int[]{Color.GREEN, 0xffffffff, Color.RED}, null,
                        Shader.TileMode.CLAMP);
                //对当前View的paint设置渲染
                getPaint().setShader(mLinearGradient);
                matrix = new Matrix();
            }
        }
    }
}

方法二:通过组合实现新的控件

方法三:重写View来实现全新的控件

参考

Android自定义View(一、初体验自定义TextView)

转载请标明出处: http://blog.csdn.net/xmxkf/article/details/51376048 本文出自:【openXu的博客】 继承View重写onDraw...
  • u010163442
  • u010163442
  • 2016年05月19日 16:10
  • 19470

Android之——自定义TextView

在这一篇博文中,将向大家介绍如何以最简单的方式,来自定义Android中的控件,下面我们以自定义TextView为例来向大家介绍如何自定义Android中的控件。 首先,我们来简单说一下Android...
  • l1028386804
  • l1028386804
  • 2015年07月27日 11:48
  • 6653

自定义TextView实现跑马灯效果

自定义TextView实现跑马灯效果 效果图: ...
  • qq_34908107
  • qq_34908107
  • 2016年08月18日 23:03
  • 925

Android自定义View入门---自定义一个TextView

自定义一个TextView本篇作为入门级介绍,以自定义TextView为案例,介绍一下自定义View的流程。自定义View玩的比较溜的小伙伴们可以略过。 简介 自定义View的类型 自定义View的套...
  • jsonnan
  • jsonnan
  • 2017年06月28日 09:33
  • 282

TextView---自定义样式

有时候需要自定义一个按钮,用textview也可以实现 (1)创建一个供TextView使用的背景selector并且放到drawable文件夹下面 ...
  • u012611418
  • u012611418
  • 2016年02月15日 10:59
  • 864

自定义圆角TextView

自定义属性:
  • Hu_wenpeng
  • Hu_wenpeng
  • 2017年06月22日 15:11
  • 436

android自定义TextView(一)

自定义TextView,  实现基础的更改字符串中颜色.. 通常实现更改,有的人想到使用多个textview 来实现,现在来自定义view, 来动态更改字符串颜色。 首先看下自定义view, Mui...
  • xiabing082
  • xiabing082
  • 2017年01月14日 10:27
  • 296

Android中自定义TextView的形状

基本步骤: 在drawable文件夹下建立一个shape.xml shape.xml: ...
  • u013266600
  • u013266600
  • 2015年12月07日 21:25
  • 2413

Android自定义组件之自动换行的TextView

做Android这么长时间,对自定义组件这块知识了解的很少。之前公司项目里有个模块需求是自动换行,今天重新写个组件实现这个效果。       效果图如下:...
  • eclothy
  • eclothy
  • 2014年09月18日 20:54
  • 1540

Android自定义带下划线的TextView

Android自定义带下划线的TextView     本例是从本博客android客户端中抠出来的一个组件,代码很简单,实现一个带下划线的文本框。     先看效果图:          我们可以通...
  • anxpp
  • anxpp
  • 2016年02月26日 18:34
  • 2610
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:自定义TextView
举报原因:
原因补充:

(最多只允许输入30个字)