自定义控件之--继承控件(圆形TextView)

师从郭大,自学于心,继承控件无疑就是继承自现有控件,保持继承的控件的属性并进行必要的扩展。

比如下面这个自定义控件,它就保持了TextView的属性,并对TextView的外观进行必要的修改该来适应自己的项目,主要实现的是一个圆形的TextView的功能。

三个构造方法:

onMesure():onMeasure()方法顾名思义就是用于测量视图的大小的,确定视图的宽度和高度的规格和大小;

draw():视图绘制,canvas.drawCircle(getWidth()/2, getHeight()/2,Math.max(getWidth(), getHeight())/2, mBgPaint);绘制圆形。

给Canvas加上抗锯齿标志:

PaintFlagsDrawFilter pfd =newPaintFlagsDrawFilter(0,Paint.ANTI_ALIAS_FLAG|Paint.FILTER_BITMAP_FLAG);

canvas.setDrawFilter(pfd);

 

绘制圆形的TextView:

canvas.drawCircle(getWidth()/2, getHeight()/2,Math.max(getWidth(), getHeight())/2, mBgPaint);

设置回调方法,两伙控制组件的内容和背景:

setBackgroundColor

setNotifiText

  1.  1 package com.example.circletextview;
     2 import android.content.Context;
     3 import android.graphics.Canvas;
     4 import android.graphics.Color;
     5 import android.graphics.Paint;
     6 import android.graphics.PaintFlagsDrawFilter;
     7 import android.util.AttributeSet;
     8 import android.widget.TextView;
     9 public class CircleView extends TextView {
    10     private Paint mBgPaint = new Paint();
    11     PaintFlagsDrawFilter pfd = new PaintFlagsDrawFilter(0, Paint.ANTI_ALIAS_FLAG|Paint.FILTER_BITMAP_FLAG);
    12     public CircleView(Context context, AttributeSet attrs, int defStyle) {
    13         super(context, attrs, defStyle);
    14     }
    15     public CircleView(Context context, AttributeSet attrs) {
    16         super(context, attrs);
    17         mBgPaint.setColor(Color.WHITE);
    18         mBgPaint.setAntiAlias(true);
    19     }
    20     public CircleView(Context context) {
    21         super(context);
    22         mBgPaint.setColor(Color.WHITE);
    23         mBgPaint.setAntiAlias(true);
    24     }
    25     @Override
    26     protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    27         super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    28         int measuredWidth = getMeasuredWidth();
    29         int measuredHeight = getMeasuredHeight();
    30         int max = Math.max(measuredWidth, measuredHeight);
    31         setMeasuredDimension(max, max);
    32     }
    33     @Override
    34     public void setBackgroundColor(int color) {
    35         mBgPaint.setColor(color);
    36     }
    37     /**
    38      * 设置通知个数显示
    39      * @param text
    40      */
    41     public void setNotifiText(int text){
    42         setText(text+"");
    43     }
    44     @Override
    45     public void draw(Canvas canvas) {
    46         canvas.setDrawFilter(pfd);//给Canvas加上抗锯齿标志
    47         canvas.drawCircle(getWidth()/2, getHeight()/2, Math.max(getWidth(), getHeight())/2, mBgPaint);
    48         super.draw(canvas);
    49     }
    50 }

github:

https://github.com/soyoungboy/MyCircleTextView

时间: 2024-08-09 10:35:01

自定义控件之--继承控件(圆形TextView)的相关文章

【安卓自定义控件系列】安卓自定义控件之组合控件

在安卓开发中,谷歌已经为我们提供了许多原生控件,基本上能够满足我们日常的开发需求,但是某些项目中原生控件可能达不到产品所要求的各式各样的酷炫效果或功能效果,这个时候我们只能自己自定义控件来满足项目需求,我们知道自定义控件包括三种方式: 1继承控件,即继承谷歌提供的原生控件,在此基础上提供一些原生控件不具备的功能,如github上各种酷炫效果的开源组件基本上都是采用的这种方式. 2组合控件:即组合多个原生控件来达到某些单个原生控件原本不具备的功能,这个在日常开发中应该是使用的比较多的,如基本上每个

自定义控件VS用户控件

1 自定义控件与用户控件区别 WinForm中, 用户控件(User Control):继承自 UserControl,主要用于开发 Container 控件,Container控件可以添加其他Controls控件 自定义控件(Custom Control):继承自 Control,主要用于开发windows控件的最基本的类,比如 Text,Button 控件 2 要开发自己的控件的几种方法[1] 复合控件(Composite Controls):将现有的各种控件组合起来,形成一个新的控件,来满

Android自定义控件之日历控件

Android自定义控件之日历控件 2015-10-23 Android开发中文站 三月份学习android,至今也有半年有余,中间也做过两个项目,但是依然感觉自己做的应用不是很有新意,比不上应用市场上那些应用如此绚丽.所以自己仍需继续努力.学习至今,仍感觉自定义控件是一块硬骨头,还没修炼到身后的内功,下面就切入正题,以一次项目的需求,来实现一个自定义的日历控件.效果图先来一发. 我们分析下效果图,然后确定我们的需求. (1).绘制星期的自定义View,用于标识日期的礼拜. (2).绘制日期的自

C# 自定义控件VS用户控件

1 自定义控件与用户控件区别 WinForm中, 用户控件(User Control):继承自 UserControl,主要用于开发 Container 控件,Container控件可以添加其他Controls控件 自定义控件(Custom Control):继承自 Control,主要用于开发windows控件的最基本的类,比如 Text,Button 控件 2 要开发自己的控件的几种方法[1] 复合控件(Composite Controls):将现有的各种控件组合起来,形成一个新的控件,来满

winform 自定义控件:半透明Loading控件

winform  自定义控件:半透明Loading控件 by wgscd date:2015-05-05 效果: using System;using System.Drawing;using System.Windows.Forms;using System.ComponentModel;using System.Threading; namespace wgscd{ /// <summary> /// 自定义控件:半透明控件 /// </summary> [ToolboxBit

【自定义控件】组合控件

组合控件是自定义控件的一种,只不过它是由其他几个原生控件组合而成,故名组合控件. 在实际项目中,GUI会遇到一些可以提取出来做成自定义控件情况. 一个自定义控件的好处就是把一些需要模块化的UI和逻辑放在一起,做到了高内聚,向其他模块提供接口并很少 依赖外界,这样就是低耦合.一个自定义控件就是一个封闭的王国,这里由你掌控. 上述是我自己的一个体会,想必大家也会常做自定义控件吧,就像逻辑部分的模块化一样. 下面我要做一个例子,请看完成图. 下面一排图片加文字就是组合控件了,我是怎么做的呢? 其实这里

Android自定义控件——自定义组合控件

转载请注明出处http://blog.csdn.net/allen315410/article/details/39581055  前面几篇博文介绍了Android如何自定义控件,其实就是讲一下如何"从无到有"的自定义一个全新的控件,继承View或者继承ViewGroup,复写其相关方法,这种自定义控件的方式相对来说难度较大,而且并不是所有需要新控件的情况下,都要这样进行.有很多情况下,我们只要运用好Android给我提供好的控件,经过布局巧妙的结合在一起,就是一个新的控件,我称之为&

Android自定义控件1--自定义控件介绍

Android控件基本介绍 Android本身提供了很多控件比如我们常用的有文本控件TextView和EditText:按钮控件Button和ImageButton状态开关按钮ToggleButton单选复选按钮RadioButton和RadioGroup单选按钮和复选按钮CheckBox图片控件ImageView时钟控件AnalogClock和DigitalClock进度条ProgressBar和日期与时间选择控件DatePicker和TimePicker等. 文本控件TextView 和Ed

android 自定义控件学习之三 控件布局常用知识总结

1.View是什么 View是Android所有控件的基类,简单到TextView.Button,复杂到RelativeLayout,LinearLayout,其共同基类都是View. 所以,View可以理解为控件的抽象,也是一个控件. 除此之外,还有ViewGroup,字面意义上,它表示控件组,内部可以包含许多个控件. ViewGroup也继承自View,这意味着,一个View的可以是单个控件,也可以是多个控件组成的一组控件,这就形成了View树. 下面这个图很好地体现了View的继承关系 2