通常情况下,Android实现自定义控件无非三种方式。

Ⅰ、继承现有控件,对其控件的功能进行拓展。

Ⅱ、将现有控件进行组合,实现功能更加强大控件。

Ⅲ、重写View实现全新的控件

本文重点讨论继承现有控件进行拓展实现自定义控件。这是一个非常重要的自定义控件的方法,可以站在原生控件这个巨人肩膀上,拓展自身的功能,一般来说,我们可以在ondraw方法中对原生控件进行绘制。

本文将以拓展textView为例,看我们是如何继承现有控件,来自定义一个强大控件。这个自定义控件就是带有边框文本框,并且边框与背景的颜色不一样。大体效果图是这样的:

我们来分析一下如何实现这样的效果。我们此时应当盯上OnDraw方法,重写OnDraw方法,在OnDraw方法中分别画两个有带颜色背景矩形边框就可以了。这样,文本框就会有错落有致的层次感了。

要有这种错落有致的效果,我们第一步要做的是定义画内边框和外边框的画笔,定义的代码如下:

private void initView() {

mPaint1 = new Paint();

mPaint1.setColor(Color.BLUE);

mPaint1.setStyle(Style.FILL);

mPaint2 = new Paint();

mPaint2.setColor(Color.YELLOW);

mPaint2.setStyle(Style.FILL);

}

我们定义了第一种画笔颜色为蓝色,画笔的填充模式为完全填充。第二种画笔颜色为黄色,同样填充模式为完全填充。

有了不同颜色画笔之后,我们所需要做的是在OnDraw方法运用这两只画笔画不同矩形,这样代码又是这样:

canvas.drawRect(0, 0, getMeasuredWidth(), getMeasuredHeight(), mPaint1);

canvas.drawRect(10, 10, getMeasuredWidth() - 10,

getMeasuredHeight() - 10, mPaint2);

canvas.save();

canvas.translate(10, 0);

super.onDraw(canvas);

canvas.restore();

我们画了两个长宽不等的矩形,并且画布平移了10个单位。这样画出来的自定义控件为:

这个例子,非常简单,可能大家对继承原生控件还是意犹未尽的话,我们百尺竿头更进一步。做个稍微复杂点自定义TextView——带有闪烁文字的TextView。

我们分析一下实现的思路:

①要实现这个效果,我们可以充分利用paint对象的shader(渲染器)对象。

②通过不断改变linearGradient的位置,来形成这闪烁的效果。

有了这样的思路以后,我们首先在onSizeChanged方法初始化LinearGradient对象,和进行图形变换的矩阵对象。源代码如下:

if (mWidth == 0) {

mWidth = getMeasuredWidth();

if (mWidth > 0) {

mPaint = getPaint();

mLinearGradient = new LinearGradient(0, 0, mWidth, 0,

new int[] { Color.GRAY, Color.GREEN, Color.GRAY }, null,

Shader.TileMode.CLAMP);

mPaint.setShader(mLinearGradient);

matrix = new Matrix();

}

}

我们将LinearGradient对象颜色设置为灰绿相间的线性渐变对象,颜色的平铺模式为平铺。

然后在onDraw方法中,不断变换线性渐变对象的位置,从而就有了文字左右闪烁的效果。源代码如下:

if (matrix != null) {

mTranslate = mTranslate + mWidth / 5;

if (mTranslate > 2 * mWidth) {

mTranslate = -mWidth;

}

matrix.setTranslate(mTranslate, 0);

mLinearGradient.setLocalMatrix(matrix);

postInvalidateDelayed(100);

}

最终形成的效果为:

这就是自定义View三板斧之一——继承现有控件一点总结,希望对大家的学习有所帮助。

时间: 2016-04-23

android 继承现有控件,Android继承现有控件拓展实现自定义控件textView相关推荐

  1. Android 自定义View 三板斧之二——组合现有控件

    通常情况下,Android实现自定义控件无非三种方式. Ⅰ.继承现有控件,对其控件的功能进行拓展. Ⅱ.将现有控件进行组合,实现功能更加强大控件. Ⅲ.重写View实现全新的控件 上文说过了如何继承现 ...

  2. Android控件的继承关系图

    Android中所有控件都继承自android.view.View,其中android.view.ViewGroup是View的一个重要子类,绝大部分的布局都继承自ViewGroup. 下面是安卓控件 ...

  3. 如何在Android实现桌面清理内存简单Widget小控件

    如何在Android实现桌面清理内存简单Widget小控件 我们经常会看到类似于360.金山手机卫士一类的软件会带一个widget小控件,显示在桌面上,上面会显示现有内存大小,然后会带一个按键功能来一 ...

  4. android开发重要控件,Android界面编程——Android基本控件

    Android界面编程 Android应用开发的一项重要内容就是界面开发.对于用户来说,不管APP包含的逻辑多么复杂,功能多么强大,如果没有提供友好的图形交互界面,将很难吸引最终用户. 作为一个程序员 ...

  5. Android View体系(十)自定义组合控件

    相关文章 Android View体系(一)视图坐标系 Android View体系(二)实现View滑动的六种方法 Android View体系(三)属性动画 Android View体系(四)从源 ...

  6. Android之横向滑动的广告(网格控件)

    转载请标明出处: http://blog.csdn.net/hai_qing_xu_kong/article/details/53264494 本文出自:[顾林海的博客] ##前言 很早以前写过一篇自 ...

  7. android 电量控件,Android实现显示电量的控件代码

    下面介绍了Android实现显示电量的控件代码,具体代码如下: 1.目录结构,本人是使用安卓死丢丢. 2.运行界面,输入框中输入数值,点击刷新,会再电池中显示出相应的电量 3.绘制自定义电池控件,首先 ...

  8. android+ebook控件,Android 自定义控件 eBook 翻书效果

    Book.java文件: package com.book; import Android.app.Activity; import android.os.Bundle; import android ...

  9. Android 第十八课 强大的滚动控件 RecyclerView

    步骤: 一.添加依赖库 compile'com.android.support:recyclerview-v7:26.1.0' 二.在activity_mian.xml中,添加RecyclerView ...

最新文章

  1. python从入门到精通视频(全60集)-【网盘下载】Python从入门到精通视频(全60集)...
  2. java设计模式概述
  3. 【Matlab 图像】bwlabel() 连通域及图像分割
  4. sentinel 官方文档_Sentinel控制台监控数据持久化到MySQL数据库
  5. IntelliJ IDEA 旗舰版(Ultimate) 破解与注册(可以在加载界面显示自己名字)
  6. 使用Xcode 4编译器设定Release/Debug教程
  7. smarty+php+ajax 简单无刷新分页
  8. 力扣 1553. 吃掉 N 个橘子的最少天数 记忆化DFS|记忆化BFS|剪枝
  9. 当S8遇上边缘计算:谈阿里云ENS对直播业务场景的支撑
  10. Ubuntu18.04应用程序安装集锦
  11. SpringSecurity+SpringSocial 实现QQ登入(一)
  12. 对_stdcall 的理解 (转)
  13. 葡萄酒逻辑回归分类(scala实现)
  14. 云片网短信模版自定义变量的替换内容
  15. 小米盒子3显示无网络连接服务器,小米盒子不显示无线网络连不上 - 卡饭网
  16. 国家图书馆认证中国长峰制定的《婴幼儿血管瘤临床路径》
  17. Android studio 打包项目,抛出异常keystore was tampered with,or password was incorrect!
  18. Linux内核信号杀死内核线程,linux内核线程对信号的处理过程.
  19. 我的第一个html网页(完整代码)
  20. 【苏宁消费金融对接苏宁联盟链 打造金融区块链应用案例】

热门文章

  1. abb机器人建立工件坐标系_abb机器人坐标系说明介绍
  2. java studentmanager_StudentManager.java
  3. 笔记本html连接电视机黑屏是怎么回事,电脑连接电视黑屏是怎么回事
  4. cpu 指定cpu执行 java_java程序可以实现在指定CPU上运行吗?
  5. java excel 多个sheet_Java Excel导出多个工作表(添加多个sheet)
  6. sklearn分类任务代码整理
  7. 16进制在c语言中用来做什么,十六进制在代码中有什么用
  8. c语言编程命令,C语言编程命令
  9. wordpress主题ajax,为自制WordPress主题/插件的后台设置页面添加ajax支持
  10. C#中使用FFMPEG切割、合并视频。