继承View

1.重写onMeasure(int wMeasureSpec,int hMeasureSpec)处理程序,这样可以标明视图尺寸

2.重写onDraw,以便绘制我们自己的自定义视图内

3.在onMeasure方法中解码传入的参数

int hSpecMode = MeasureSpec.getMode(hMeasureSpec);

int hSpecSize = MeasureSpec.getSize(hMeasureSpec);

int myHeight = hSpecSize;

4.使用已解码的模式参数来查找我们应该设置的视图大小

if(hSpecMode == MeasureSpec.EXACTLY)

myHeight = hSpecSize;        //返回视图的模式正好,视图会被放入一个大小完全相符的区域内,视图布局指定了特定大小,或如果要求视图填充父视图,就会将该值传递给你

else if(hSpecMode == MeasureSpec.AT_MOST)

//Wrap Content        //AT_MOST表示只要不超过给出的最大尺寸,即可为视图定义自己的尺寸

//Repeat for Width

setMeasuredDimension(myWidth,myHeight);

5.在onDraw方法的自定义视图上进行

示例代码

private void init() {

mTextPaint = new Paint(Paint.ANTI_ALIAS_FLAG);

mTextPaint.setColor(mTextColor);

if (mTextHeight == 0) {

mTextHeight = mTextPaint.getTextSize();

} else {

mTextPaint.setTextSize(mTextHeight);

}

mPiePaint = new Paint(Paint.ANTI_ALIAS_FLAG);

mPiePaint.setStyle(Paint.Style.FILL);

mPiePaint.setTextSize(mTextHeight);

mShadowPaint = new Paint(0);

mShadowPaint.setColor(0xff101010);

mShadowPaint.setMaskFilter(new BlurMaskFilter(8, BlurMaskFilter.Blur.NORMAL));

...

任何在onDraw方法中创建的对象,包括画笔对象,都会以非常高的频率创建并破坏,这回影响UI流畅性

解决方案:就是将onDraw中需要的对象扩大其作用范围,移动到该方法外面

6.如何将自定义视图添加到布局,使其在xml中的完整包名和类名

<wp.MyView

android:height = "..."

android:width = "..."

/>

对于不控制自身值的通用视图

最简单的备用方法是运行时在应用中设置内容描述

myView.setContentDescription(contentDescription);

一种更为强大的解决方案是只要可视内容被修改,就从你的视图中,发送辅助功能事件

AccessibilityManager accessibilityManager =

(AccessibilityManager) context.getSystemService(

Context.ACCESSIBILITY_SERVICE);

if (accessibilityManager.isEnabled()) {

sendAccessibilityEvent(

AccessibilityEvent.TYPE_VIEW_TEXT_CHANGED);

}

然后覆盖dispatchPopulateAccessibilityEvent(AccessibilityEvent ev){

ev.getText().add(windSpeedDir);

return true;

}

Android开发之自定义视图的更多相关文章

  1. android开发之自定义组件

    android开发之自定义组件 一:自定义组件: 我认为,自定义组件就是android给我们提供的的一个空白的可以编辑的图片,它帮助我们实现的我们想要的界面,也就是通过自定义组件我们可以把我们要登入的 ...

  2. [转载]开发 Spring 自定义视图和视图解析器

    原文出处 http://www.ibm.com/developerworks/cn/java/j-lo-springview/ 概述 Spring 3.0 默认包含了多种视图和视图解析器,比如 JSP ...

  3. Android开发之自定义的ListView(UITableViewController)

    Android开发中的ListView, 顾名方法思义,就是表视图.表示图在iOS开发中就是TableView.两者虽然名称不一样,但是其使用方法,使用场景以及该控件的功能都极为相似,都是用来展示大量 ...

  4. Android开发之自定义组件和接口回调

    说到自定义控件不得不提的就是接口回调,在Android开发中接口回调用的还是蛮多的.在这篇博客开始的时候呢,我想聊一下iOS的自定义控件.在iOS中自定义控件的思路是继承自UIView, 在UIVie ...

  5. Android中的自定义视图控件

    简介 当现有控件不能满足需求时,就需要自定义控件. 自定义控件属性 自定义控件首先要继承自View,重写两个构造函数. 第一个是代码中使用的: public MyRect(Context contex ...

  6. Android开发之自定义局部导航菜单

    如今,要实现导航功能方案有很多.比如: 1.用3.0+自带的Toolbar + Fragment导航. 2.用Tabhost实现导航.小弟学浅,就只用过这两种方案实现导航. 但是这两种方案都有一个很明 ...

  7. Android开发进阶——自定义View的使用及其原理探索

    在Android开发中,系统提供给我们的UI控件是有限的,当我们需要使用一些特殊的控件的时候,只靠系统提供的控件,可能无法达到我们想要的效果,这时,就需要我们自定义一些控件,来完成我们想要的效果了.下 ...

  8. Android开发之自定义圆角矩形图片ImageView的实现

    android中的ImageView只能显示矩形的图片,这样一来不能满足我们其他的需求,比如要显示圆角矩形的图片,这个时候,我们就需要自定义ImageView了,其原理就是首先获取到图片的Bitmap ...

  9. Android开发之自定义圆形的ImageView的实现

    android中的ImageView只能显示矩形的图片,这样一来不能满足我们其他的需求,比如要显示圆形的图片,这个时候,我们就需要自定义ImageView了,其原理就是首先获取到图片的Bitmap,然 ...

随机推荐

  1. oracle_用户与概要文件

    Oracle 用户与概要文件 2012-09-01 15:05:47| 分类: Oracle | 标签:用户与概要文件 |举报 |字号大中小 订阅     用户管理看上去简单其实也是最常出现问题的一个 ...

  2. PickerController 添加照片---iOS

    前言 添加照片我们常用的地方有,更换头像,发布状态,朋友圈的时候等等,那我们接下来看看怎么添加上照片吧~ github: 效果图: 正文 1.你可以直接写,也可以声明一个属性.我习惯声明一个属性. @ ...

  3. Jenkins在windows上的安装配置

     今天是2月14号,所谓西方情人节,下班回来发现,2月14过的比七夕还火热.于是上网百度百科查询了"情人节". 毕竟是中国的百度啊.是这么解释的.我感到很欣慰.过得每一个节日都应该 ...

  4. matlab最简单程序模板

    % 脚本文件: 温度转换 % 文件名:temp_conversion % 目标:将输入的华氏温度转换为绝对温度 % % 版本记录: % 时间 编者 描述 % -- :: 泡泡 原始代码 % % 定义变 ...

  5. Python2和Python3中除法操作/的不同

    X/Y 在3.0版本之前的Python中 >>>1/2 0 即一个整数(无小数部分的数)被另外一个整数除,计算结果的小数部分被截除了,只留下了整数部分 有时候,这个功能比较有用,譬如 ...

  6. 从数据库提取数据通过jstl显示在jsp页面上

    从数据库提取数据通过jstl显示在jsp页面上 1.ConnectDB.java连接数据库,把数据转换成list public class ConnectDB { private final stat ...

  7. TCP报文段的首部格式

    首部20个字节的的固定部分,40个字节的可选部分 (1)源端口和目的端口 (2)序号(是字节流的编号,0-2^32-1),如果超过了mod2^32 (3)确认号:目的主机希望源主机收到的下一个字节序号 ...

  8. 嵌套的Try-Catch块--------异常处理(3)

    当有一个Try块没有一个对应的异常可处理,则其父类的异常处理机制去处理.如果父类的异常处理机制不能处理,则java run-time system将会抛出一个异常. 例子: class Nest{ p ...

  9. Android的开机流程

    Android的开机流程 1. 系统引导bootloader 1) 源码:bootable/bootloader/* 2) 说明:加电后,CPU将先执行bootloader程序,此处有三种选择 a) ...

  10. [APUE]进程关系(上)

    一.终端登录 1. 4.3+BSD终端登录 系统管理员创建一个通常名为/etc/ttys的文件,其中,每个终端设备有一行,每一行说明设备名和传到getty程序的参数,这些参数说明了终端的波特率.当系统 ...