返回顶部
首页 > 资讯 > 移动开发 >Android继承现有控件拓展实现自定义控件textView
  • 217
分享到

Android继承现有控件拓展实现自定义控件textView

自定义Android 2022-06-06 08:06:36 217人浏览 安东尼
摘要

通常情况下,Android实现自定义控件无非三种方式。   Ⅰ、继承现有控件,对其控件的功能进行拓展。   Ⅱ、将现有控件进行组合,实现功能更加强大控件。   Ⅲ、重写View

通常情况下,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三板斧之一——继承现有控件一点总结,希望对大家的学习有所帮助。

您可能感兴趣的文章:Android自定义控件实现随手指移动的小球Android开发之自定义控件用法详解Android自定义控件实现可左右滑动的导航条Android自定义控件LinearLayout实例讲解Android自定义控件实现简单的轮播图控件Android自定义控件实现简单写字板功能Android自定义控件之圆形/圆角的实现代码详解Android自定义控件属性TypedArray以及attrsandroid开发教程之自定义控件checkbox的样式示例android 自定义控件 自定义属性详细介绍Android自定义控件(实现视图树绘制指示器)


--结束END--

本文标题: Android继承现有控件拓展实现自定义控件textView

本文链接: https://lsjlt.com/news/25177.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Android继承现有控件拓展实现自定义控件textView
    通常情况下,Android实现自定义控件无非三种方式。   Ⅰ、继承现有控件,对其控件的功能进行拓展。   Ⅱ、将现有控件进行组合,实现功能更加强大控件。   Ⅲ、重写View...
    99+
    2022-06-06
    自定义 Android
  • Android歌词显示控件TextView自定义
    ======================================================================================  ...
    99+
    2022-06-06
    Android
  • Android自定义实现日历控件
    本文实例为大家分享了Android自定义实现日历控件的具体代码,供大家参考,具体内容如下 1. Calendar类 2. 布局 创建calendar_layout.xml <...
    99+
    2024-04-02
  • Android自定义控件之继承ViewGroup创建新容器
    欢迎大家来学习本节内容,前几节我们已经学习了其他几种自定义控件,分别是Andriod 自定义控件之音频条及 Andriod 自定义控件之创建可以复用的组合控件还没有学习的同学请...
    99+
    2022-06-06
    容器 Android
  • Android自定义控件实现时间轴
    本文实例为大家分享了Android自定义控件实现时间轴的具体代码,供大家参考,具体内容如下 由于项目中有需求,就简单的封装一个,先记录一下,有时间上传到github。 1、先增加自定...
    99+
    2024-04-02
  • Android 实现自定义折线图控件
    目录前言概述原点计算Y轴宽度计算X轴高度X轴绘制轴线X轴刻度间隔网格线、文本Y轴计算Y轴分布刻度间隔、网格线、文本折线代码前言 日前,有一个“折现图”的需求,...
    99+
    2024-04-02
  • Android自定义控件实现简单的轮播图控件
    最近要做一个轮播图的效果,网上看了几篇文章,基本上都能找到实现,效果还挺不错,但是在写的时候感觉每次都要单独去重新在Activity里写一堆代码。于是自己封装了一下。本篇轮播图...
    99+
    2022-06-06
    轮播图 轮播 Android
  • Android组合控件实现功能强大的自定义控件
    通常情况下,Android实现自定义控件无非三种方式。   Ⅰ、继承现有控件,对其控件的功能进行拓展。   Ⅱ、将现有控件进行组合,实现功能更加强大控件。   Ⅲ、重写View...
    99+
    2022-06-06
    自定义 自定义控件 Android
  • Android自定义控件之自定义组合控件(三)
    前言: 前两篇介绍了自定义控件的基础原理Android自定义控件基本原理详解(一)、Android自定义控件之自定义属性(二)。今天重点介绍一下如何通过自定义组合控件来提高布...
    99+
    2022-06-06
    Android
  • Android自定义控件实现手势密码
    Android手势解锁密码效果图       首先呢想写这个手势密码的想法呢,完全是凭空而来的,然后笔者就花了一天时间弄出来...
    99+
    2022-06-06
    手势 Android
  • Android自定义控件实现时钟效果
    在学习安卓群英传自定义控件章节的时候,有一个例子是绘制时钟,在实现了书上的例子后就想看这个时钟能不能动起来。 这里选择延迟一秒发送消息重绘view来实现的动画,对外提供了开启时...
    99+
    2022-06-06
    Android
  • Android如何自定义实现日历控件
    这篇文章主要介绍Android如何自定义实现日历控件,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!具体内容如下1. Calendar类2. 布局创建calendar_layout.xml<LinearLayou...
    99+
    2023-06-25
  • UI5控件继承实现问题有哪些
    本篇内容介绍了“UI5控件继承实现问题有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!C同事问了我这个问题。使用下列这段代码extend...
    99+
    2023-06-04
  • WPF自定义控件的实现
    方式一:基于现有控件进行扩展,如基于button进行扩展,UI可直接用xmal进行编辑设计,逻辑用xaml.cs进行编辑 方法二:直接创建wpf自定义控件 本文用方法二开展自定义...
    99+
    2023-03-03
    WPF自定义控件
  • 【Android自定义控件】自适应文字大小的TextView
    Android8.0以上可以在TextView中添加autoSizeTextType实现 Android8.0以下要想达到根据TextView大...
    99+
    2022-06-06
    自适应 Android
  • Android自定义控件实现方向盘效果
    在很多开发中,为了界面更加的友好,在自定义View的基础上,开发者会开发出各种各样的自定义控件来满足实际开发需要,其中有一种”方向盘”的控件在实际开发中非常常见,便于用户进行一...
    99+
    2022-06-06
    Android
  • Android自定义实现循环滚轮控件WheelView
    首先呈上Android循环滚轮效果图:   现在很多地方都用到了滚轮布局WheelView,比如在选择生日的时候,风格类似系统提供的DatePickerDialog...
    99+
    2022-06-06
    循环 wheelview Android
  • Android自定义控件ViewGroup实现标签云(四)
    前言: 前面几篇讲了自定义控件绘制原理Android自定义控件基本原理详解(一) ,Android自定义控件之自定义属性(二) ,Android自定义控件之自定义组合控件(三...
    99+
    2022-06-06
    标签云 标签 Android
  • Android自定义View控件实现刷新效果
    三种得到LinearInflater的方法 a. LayoutInflater inflater = getLayoutInflater(); b. LayoutInflate...
    99+
    2022-06-06
    view Android
  • Android自定义控件实现圆形进度条
    项目中常用到的圆形进度条有好多个,从网上搜到的自定义进度条多是封装的比较好的代码,但是不利于初学者,现在本博客就教给大家如何一步步实现自定义进度条的效果: 先看效果如图… ...
    99+
    2022-06-06
    进度条 Android
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作