android开发之自定义View 详解 资料整理 小冰原创整理,原创作品。
/** * 作者:David Zheng on 2015/11/7 15:38 * *
网站:http://www.93sec.cc * *
微博:http://weibo.com/mcxiaobing * *
微博:http://weibo.com/93sec.cc */ 个人交流QQ986945193
- 课程介绍
- 自定义控件在android相当重要。要求:大家熟悉自定义控件的原理,熟悉自定义控件的使用步骤。
- 按类型划分,自定义View的实现方式可分为三种:自绘控件、组合控件、以及继承控件。
- 如何让自定义的View在界面上显示出来? 只需要像使用普通的控件一样来使用自定义View就可以了。
- 1,回顾系统的一些控件 ,Viewpager广告条的展示
- 2,介绍View的绘制过程
- 3,自定义View:开关Button
- 4,自定义属性
- 5,组合控件:标题栏
- 6,继承系统控件:ListView刷新加载的原理等
- 自定义控件在android相当重要。要求:大家熟悉自定义控件的原理,熟悉自定义控件的使用步骤。
- 系统控件
- 心中要有一个View树
- 概念:自绘控件的意思就是,这个View上所展现的内容全部都是自己绘制出来的。
- 自绘控件的步骤:
- 实现构造方法
- onMeasure(int ,int)中调用onMeasureDimention() 进行测量
- onDraw(Canvas)方法进行绘制View
- 实现onTouchEvent(MotionEvent ev)方法,对touch事件进行解析
- 一些API:
- 绘制View主要是onDraw()方法中完成。通过参数Canvas来处理,相关的绘制主要有drawRect、drawLine、drawPath等等。
- Canvas绘制的常用方法:
- drawColor() 填充颜色
- drawLine() 绘制线
- drawLines() 绘制线条
- drawOval() 绘制椭圆
- drawPaint() 画笔绘制
- drawPath() 绘制路径
- drawPicture() 绘制图片
- drawPoint() 绘制点
- drawPoints() 绘制点
- drawRGB() 填充颜色
- drawRect() 绘制矩形
- drawText() 绘制文本
- drawTextOnPath() 在路径上绘制文本
- 2、刷新View :(刷新view的方法这里主要有:)
- invalidate(int l,int t,int r,int b)
- 刷新局部,四个参数分别为左、上、右、下
- invalidate()
- 整个view刷新。执行invalidate类的方法将会设置view为无效,最终重新调用onDraw()方法。
- invalidate()是用来刷新View的,必须是在UI线程中进行工作。在修改某个view的显示时,调用invalidate()才能看到重新绘制的界面。invalidate()的调用是把之前的旧的view从主UI线程队列中pop掉。
- invalidate(Rect dirty)
- 刷新一个矩形区域
- invalidate(int l,int t,int r,int b)
- 概念: 组合控件的意思就是,不需要自己去绘制视图上显示的内容,而只是用系统原生的控件就好了,但可以将几个系统原生的控件组合到一起,这样创建出的控件就被称为组合控件。
- 例如:标题栏就是个很常见的组合控件,很多界面的头部都会放置一个标题栏,标题栏上会有个返回按钮和标题,点击按钮后就可以返回到上一个界面。那么下面我们就来尝试去实现这样一个标题栏控件。
- 概念: 继承控件的意思就是,我们并不需要自己重头去实现一个控件,只需要去继承一个现有的控件,然后在这个控件上增加一些新的功能,就可以形成一个自定义的控件了。这种自定义控件的特点就是不仅能够按照我们的需求加入相应的功能,还可以保留原生控件的所有功能,比如 Android PowerImageView实现,可以播放动画的强大ImageView 就是一个典型的继承控件。
- 例如:对ListView进行扩展, 加入在ListView上滑动就可以显示出一个删除按钮,点击按钮就会删除相应数据的功能。或者刷新加载的ListView
- 步骤:
1,ViewPager的图片的展示
- 步骤:
- 1,自定义类继承自View
- 2,重写onMeasure方法,设置View的大小
- 3,重写onDraw方法,绘制View的内容
- 4,重写onTouchEvent事件,对touch事件进行解析
http://schemas.android.com/apk/res/com.zhaokeming.mytogglebtn"
- 重要的知识点:
- 1,去掉标题: requestWindowFeature(Window.FEATURE_NO_TITLE); 必须在setContentView()方法执行前
- 2,相同的布局,可以抽出来一个layout_xxx.xml 。 引用 <include layout="@layout/layout_xxx">
- 3 ,定义相同控件的功能时,就可以抽出来一个 自定义组合控件
- 步骤:
- 1,继承一个layout_xxx.xml布局的最外面的 布局,比如 LinearLayout,RelativeLayout等等
- 2, // inflate:把xml布局文件,转换成 View对象 ;把xml文件转换成的View对象,然后赋值给当前的类。 ;当前的类,就相当于View对象 ;通过调用这个 View.inflate(mContext, R.layout.layout_xxx, this);
- 3,把控件初始化,添加相应的功能
- 步骤:
- 1,
- 注意事项:
- 1,
- addHeaderView(View v) : 在ListView的头部,添加一个View ; 这个方法必须在 setAdapter()之前调用;
- addFooterView(v): 在ListView的底部添加view
- 2,
- getHeight(): 在执行完onLayout()方法后,才会执行
- getMeasuredHeight(); 在onMeasure()方法后,就执行;
- 实现步骤:
- mViewHeader.measure(0, 0);// 通知系统,执行测量工作
- mHeaderHeight = mViewHeader.getMeasuredHeight(); // 获得测量的高度
- 1,
/** * 作者:David Zheng on 2015/11/7 15:38 * *
网站:http://www.93sec.cc * *
微博:http://weibo.com/mcxiaobing * *
微博:http://weibo.com/93sec.cc */ 个人交流QQ986945193
转载于:https://my.oschina.net/mcxiaobing/blog/600901
android开发之自定义View 详解 资料整理 小冰原创整理,原创作品。的更多相关文章
- Android 自定义 View 详解
View 的绘制系列文章: Android View 绘制流程之 DecorView 与 ViewRootImpl Android View 的绘制流程之 Measure 过程详解 (一) Andro ...
- Android 自定义View修炼-Android开发之自定义View开发及实例详解
在开发Android应用的过程中,难免需要自定义View,其实自定义View不难,只要了解原理,实现起来就没有那么难. 其主要原理就是继承View,重写构造方法.onDraw,(onMeasure)等 ...
- android 自定义view详解
1.自定义View前首先要了解一下View的方法,虽然有些不一定要实现. 分类 方法 描述 创建 Constructors View中有两种类型的构造方法,一种是在代码中构建View,另一种是填充布局 ...
- Android开发进阶——自定义View的使用及其原理探索
在Android开发中,系统提供给我们的UI控件是有限的,当我们需要使用一些特殊的控件的时候,只靠系统提供的控件,可能无法达到我们想要的效果,这时,就需要我们自定义一些控件,来完成我们想要的效果了.下 ...
- 深入了解View实现原理以及自定义View详解
下面几篇文章对View的原理讲的非常详细. Android LayoutInflater原理分析,带你一步步深入了解View(一) Android视图绘制流程完全解析,带你一步步深入了解View(二) ...
- Android开发——事件分发机制详解
0. 前言 转载请注明出处:http://blog.csdn.net/seu_calvin/article/details/52566965 深入学习事件分发机制,是为了解决在Android开发中 ...
- Android开发 ExpandableListView 可折叠列表详解
前言 在需要实现一个List的item需要包含列表的时候,我们就可以选择ExpandableListView. 其实这个View的原始设计还是ListView的那套.就是增加2层的ListView而已 ...
- Android开发:程序目录结构详解
HelloWorld程序的目录结构概述 我们可以在文件夹中看到,HelloWorld程序的目录主要包括:src文件夹.gen文件夹.Android文件夹.assets.res文件夹. AndroidM ...
- Android开发之位置定位详解与实例解析(GPS定位、Google网络定位,BaiduLBS(SDK)定位)
在android开发中地图和定位是很多软件不可或缺的内容,这些特色功能也给人们带来了很多方便.定位一般分为三种发方案:即GPS定位.Google网络定位以及基站定位 最简单的手机定位方式当然是通过GP ...
随机推荐
- DevOps技能自查表
前篇提到了DevOps的工作岗位要求,但是没有来的及深入细节,本文根据个人10年多的经验,尽量详细地列举DevOps所需要用到的一些技术和相关参考网站. Linux基础 Linux系统的基本概念: 必 ...
- STM32F103ZET6独立看门狗
1.IWDG简介 STM32F103ZET6的独立看门狗(IWDG)是由内部LSI(内部约40KHZ低速时钟)时钟驱动的.由于IWDG是由内部低速时钟驱动,所以就算主时钟发生故障,IWDG依然能够工作 ...
- Pytest系列(10) - firture 传参数 request的详细使用
如果你还想从头学起Pytest,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1690628.html 前言 为了提高复用性,我们在写测试 ...
- Vulnhub DC-2靶机渗透
信息搜集 nmap扫描端口 nmap -sV 192.168.146.140 -p1-10000 开了80端口,那就直接访问一下把.(7744端口是ssh端口,之后会用到) 输入ip,发现url处变成 ...
- 关于Linux目录的配置
关于Linux目录的配置说明 大家都知道Linux一切皆文件,但是Linux的文件有那么多,目录也不少.他们都是干什么用的呢,有没有什么规律呢?今天我们就来讨论一下Linux目录的配置 Linux目录 ...
- 世界疫情app柱形图显示
访问云服务器的mysql实现数据的获取.最后通过柱形图的形式将数据显示在页面上: 遇到的主要困难时对于云服务器的mysql连接本地的navicat之间事情,最后通过网上的各种解决办法完成了相关的内容. ...
- java web数据库的增删改查详细
本次课上实验是完成数据库的增删改查. 包括增加用户信息.删除用户信息.多条件查找用户信息.修改用户信息(主要是复选框单选框等的相关操作.) 下面下看一下各个界面的样子. 总页面:显示全部页面:增加页面 ...
- 白话说编程之java线程
线程和进程: 在说多线程之前,我们先来研究一下线程,说到线程,我们又不得不说到进程,因为很多初学者会把线程和进程分不清,搞混淆. 进程: 是操作系统系统运行的最小单元.怎么理解这句话,可以这样去对比, ...
- https的秘钥公钥以及之间的会话流程
一 共享秘钥 1.1 概念 共享秘钥和我们生活中同一把锁的钥匙概念类似,对同一把锁来说,加锁时使用什么钥匙,解锁也必须使用同样的钥匙. 1.2 共享秘钥在HTTP传输中的缺点 以共享密钥方式加密时 ...
- Win10 cmd的ssh命令连接linux虚拟机
其实就是一个小发现了~ 闲的没事的时候在cmd里面敲了ssh命令,居然提示是一个命令,貌似以前是没有这功能的.然后就打开虚拟机试试能不能远程连接.没想到还成功了~ 有了这功能就省得安装专门的远程连接工 ...
