继承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 decode函数的用法

    含义解释: decode(字段,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值) 用法如下:IF 字段=值1 返回 返回值1ELSIF 字段=值2 返回 返回值2 ......ELSIF ...

  2. flex控件总结

    Flex基本控件总结 一.flex控件的分类:文本控件(text controls).数据源控件(data provider controls).菜单控件       (menu  controls) ...

  3. 前端开发面试题总结之——JAVASCRIPT(一)

    ___________________________________________________________________________________ 相关知识点 数据类型.运算.对象 ...

  4. 从C#到TypeScript - Promise

    总目录 从C#到TypeScript - 类型 从C#到TypeScript - 高级类型 从C#到TypeScript - 变量 从C#到TypeScript - 接口 从C#到TypeScript ...

  5. 关于c语言中栈和堆释放的问题

    #include<iostream> #include<string> using namespace std; int main() { string st; cin> ...

  6. 单点登录实现(spring session+redis完成session共享)

    一.前言 项目中用到的SSO,使用开源框架cas做的.简单的了解了一下cas,并学习了一下 单点登录的原理,有兴趣的同学也可以学习一下,写个demo玩一玩. 二.工程结构 我模拟了 sso的客户端和s ...

  7. vpn安装

    尾戒0717   centos 6.5 openvpn 安装 安装环境: 系统:centos 6.5 openvpn:openvpn-2.2.1 lzo:lzo-2.09    下载地址:http:/ ...

  8. 阅读Facebook POP框架 笔记(一)

    在这一系列文章里,我主要会将自己阅读第三方代码的经历记录下来,尝试独立分析解剖一个框架.之前也阅读过一些第三方代码,但是实际上来说对自己的成长并没有太大的帮助,因为阅读的不细致,没有领会到代码的精髓. ...

  9. 每天一个Linux命令(19)--find命令

    linux 下 find 命令在目录结构中搜索文件,并执行指定的操作.Linux 下 find 命令提供了相当多的查找条件,功能很强大.由于 find 具有强大的功能,所以它的选项也很多,其中大部分选 ...

  10. 每天一个Linux命令(09)--touch命令

    linux的touch命令不常用,一般在使用make的时候可能会用到,用来修改文件时间戳,或者新建一个不存在的文件. 1.命令格式: touch  [选项]··· 文件··· 2.命令参数: -a 或 ...