Android自定义View实现很简单

继承View,重写构造函数、onDraw,(onMeasure)等函数。

如果自定义的View需要有自定义的属性,需要在values下建立attrs.xml。在其中定义你的属性。

在使用到自定义View的xml布局文件中需要加入xmlns:前缀="http://schemas.android.com/apk/res/你的自定义View所在的包路径".

在使用自定义属性的时候,使用前缀:属性名,如my:textColor="#FFFFFFF"。

实例:

  1. package  demo.view.my;
  2. import  android.content.Context;
  3. import  android.content.res.TypedArray;
  4. import  android.graphics.Canvas;
  5. import  android.graphics.Color;
  6. import  android.graphics.Paint;
  7. import  android.graphics.Paint.Style;
  8. import  android.util.AttributeSet;
  9. import  android.view.View;
  10. /**
  11. * 这个是自定义的TextView.
  12. * 至少需要重载构造方法和onDraw方法
  13. * 对于自定义的View如果没有自己独特的属性,可以直接在xml文件中使用就可以了
  14. * 如果含有自己独特的属性,那么就需要在构造函数中获取属性文件attrs.xml中自定义属性的名称
  15. * 并根据需要设定默认值,放在在xml文件中没有定义。
  16. * 如果使用自定义属性,那么在应用xml文件中需要加上新的schemas,
  17. * 比如这里是xmlns:my="http://schemas.android.com/apk/res/demo.view.my"
  18. * 其中xmlns后的“my”是自定义的属性的前缀,res后的是我们自定义View所在的包
  19. * @author Administrator
  20. *
  21. */
  22. public   class  MyView  extends  View {
  23. Paint mPaint; //画笔,包含了画几何图形、文本等的样式和颜色信息
  24. public  MyView(Context context) {
  25. super (context);
  26. }
  27. public  MyView(Context context, AttributeSet attrs){
  28. super (context, attrs);
  29. mPaint = new  Paint();
  30. //TypedArray是一个用来存放由context.obtainStyledAttributes获得的属性的数组
  31. //在使用完成后,一定要调用recycle方法
  32. //属性的名称是styleable中的名称+“_”+属性名称
  33. TypedArray array = context.obtainStyledAttributes(attrs, R.styleable.MyView);
  34. int  textColor = array.getColor(R.styleable.MyView_textColor,  0XFF00FF00 );  //提供默认值,放置未指定
  35. float  textSize = array.getDimension(R.styleable.MyView_textSize,  36 );
  36. mPaint.setColor(textColor);
  37. mPaint.setTextSize(textSize);
  38. array.recycle(); //一定要调用,否则这次的设定会对下次的使用造成影响
  39. }
  40. public   void  onDraw(Canvas canvas){
  41. super .onDraw(canvas);
  42. //Canvas中含有很多画图的接口,利用这些接口,我们可以画出我们想要的图形
  43. //mPaint = new Paint();
  44. //mPaint.setColor(Color.RED);
  45. mPaint.setStyle(Style.FILL); //设置填充
  46. canvas.drawRect(10 ,  10 ,  100 ,  100 , mPaint);  //绘制矩形
  47. mPaint.setColor(Color.BLUE);
  48. canvas.drawText("我是被画出来的" ,  10 ,  120 , mPaint);
  49. }
  50. }

相应的属性文件:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <resources>
  3. <declare-styleable name="MyView">
  4. <attr name="textColor" format="color"/>
  5. <attr name="textSize" format="dimension"/>
  6. </declare-styleable>
  7. </resources>

在布局文件中的使用:

【转】android 自定义控件的更多相关文章

  1. Android自定义控件之自定义ViewGroup实现标签云

    前言: 前面几篇讲了自定义控件绘制原理Android自定义控件之基本原理(一),自定义属性Android自定义控件之自定义属性(二),自定义组合控件Android自定义控件之自定义组合控件(三),常言 ...

  2. Android自定义控件之自定义组合控件

    前言: 前两篇介绍了自定义控件的基础原理Android自定义控件之基本原理(一).自定义属性Android自定义控件之自定义属性(二).今天重点介绍一下如何通过自定义组合控件来提高布局的复用,降低开发 ...

  3. Android自定义控件之自定义属性

    前言: 上篇介绍了自定义控件的基本要求以及绘制的基本原理,本篇文章主要介绍如何给自定义控件自定义一些属性.本篇文章将继续以上篇文章自定义圆形百分比为例进行讲解.有关原理知识请参考Android自定义控 ...

  4. Android自定义控件之基本原理

    前言: 在日常的Android开发中会经常和控件打交道,有时Android提供的控件未必能满足业务的需求,这个时候就需要我们实现自定义一些控件,今天先大致了解一下自定义控件的要求和实现的基本原理. 自 ...

  5. Android自定义控件1

    概述 Android已经为我们提供了大量的View供我们使用,但是可能有时候这些组件不能满足我们的需求,这时候就需要自定义控件了.自定义控件对于初学者总是感觉是一种复杂的技术.因为里面涉及到的知识点会 ...

  6. 一起来学习Android自定义控件1

    概述 Android已经为我们提供了大量的View供我们使用,但是可能有时候这些组件不能满足我们的需求,这时候就需要自定义控件了.自定义控件对于初学者总是感觉是一种复杂的技术.因为里面涉及到的知识点会 ...

  7. [Xamarin.Android] 自定义控件

    [Xamarin.Android] 自定义控件 前言 软件项目开发的过程中,免不了遇到一些无法使用内建控件就能满足的客户需求,例如:时速表.折线图...等等.这时开发人员可以透过自定义控件的方式,为项 ...

  8. android自定义控件实现TextView按下后字体颜色改变

    今天跟大家分享一下Android自定义控件入门,先介绍一个简单的效果TextView,按下改变字体颜色,后期慢慢扩展更强大的功能 直接看图片             第一张是按下后截的图,功能很简单, ...

  9. android 自定义控件(初篇)

    android 自定义控件 在写UI当中很多时候会用到自定义的控件,其实自定义控件就像是定义一个类进行调用就OK了.有些相关的感念可以查看API 下面就用个简单的例子来说明自定义控件: public ...

  10. Android自定义控件:进度条的四种实现方式(Progress Wheel的解析)

    最近一直在学习自定义控件,搜了许多大牛们Blog里分享的小教程,也上GitHub找了一些类似的控件进行学习.发现读起来都不太好懂,就想写这么一篇东西作为学习笔记吧. 一.控件介绍: 进度条在App中非 ...

随机推荐

  1. MVC 使用 FluentScheduler 定时器计划任务

    MVC 使用 FluentScheduler 定时器计划任务 MacBook Pro 只有四个 USB Type-C 接口是否错了? 一项新技术的诞生总会对已存在的事物造成冲击或影响,如果大家都害怕冲 ...

  2. android 讯飞语音识别(离线)注意事项

    讯飞语音识别:使用注意事项:mainfest.xml中一定要记得权限写进去21001:我的情况是没有写SpeechApp类,并且需要在application中注册:20005:无匹配结果23300:本 ...

  3. OpenCV之mixChannels()函数使用说明

    step 1: 函数功能说明 mixChannels主要就是把输入的矩阵(或矩阵数组)的某些通道拆分复制给对应的输出矩阵(或矩阵数组)的某些通道中,其中的对应关系就由fromTo参数制定. step ...

  4. boost::bind

    bind并不是一个单独的类或函数,而是非常庞大的家族,依据绑定的参数个数和要绑定的调用对象类型,总共有十个不同的形式,但它们的名字都叫bind. bind接受的第一个参数必须是一个可调用对象f,包括函 ...

  5. div 布局2

    转:http://www.kwstu.com/ArticleView/divcss_2013929173533658 关于DIV+CSS布局中用到的CSS必备知识请看:http://www.kwstu ...

  6. uva 11986

    假设有n只老鼠 每只老鼠有两种状态 死或活 则n只老鼠有 2^n方种状态 所以n只老鼠可以确定2^n只瓶子 #include <cstdio> #include <cstdlib&g ...

  7. 微软发布WP SDK8.0 新增语音、应用内支付等原生API

    http://www.csdn.net/article/2012-10-31/2811338-windows-phone-8-sdk 京时间10月30日,微软在旧金山举行新一代手机操作系统Window ...

  8. Unity3d 接入 移动MM支付SDK(2.3) 全攻略

    原地址:http://blog.csdn.net/dingxiaowei2013/article/details/26842177 先将例程运行起来 下载例程(csdn积分不够上传不了,只能用百度网盘 ...

  9. 安装numpy/scipy/scikit-learn的方法

    安装numpy 和 scipy sudo yum install lapack lapack-devel blas blas-devel   sudo yum install numpy.x86_64 ...

  10. [LeetCode]Link List Cycle II

    Given a linked list, return the node where the cycle begins. If there is no cycle, return null. Foll ...