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 ...
随机推荐
- Module Error (/index.js): error: 'HelloWorld' is defined but never used (no-unused-vars) at src\views\A.vue:9:8:
原因:
- Ring 笔记 - 核心概念
Ring 是一个在 Clojure 中的对于 HTTP 的抽象,是构建 Web 应用的底层接口和库,类似于 Java 中的 Servlet 核心概念 Handler Handler 是一个定义web应 ...
- 微信小程序之界面交互反馈
交互反馈就是在用户出发某事件之后,给用户一个反馈信息,这要是一个很友好的习惯. 在小程序中是通过一下几种方式实现的: 1.wx.showToast()方法 showToast: function (p ...
- Aactivity跳转到Bactivity之后再返回Aactivity的几种操作
一个主界面(主Activity)通过意图跳转至多个不同子Activity上去,当子模块的代码执行完毕后再次返回主页面,将子activity中得到的数据显示在主界面/完成的数据交给主Activity处理 ...
- 汇编刷题:求1000H单元开始的10个无符号字节数的最大值(本题放入了BL寄存器)
DATA SEGMENT ORG 1000H INFO DB 1,2,3,4,5,70H,71H,72H,80H,92H MAX DB 00H DATA ENDS CODE SEGMENT ASSUM ...
- Linux 下如何隐藏自己不被发现?
可能在某些情况下,自己运行的程序不想或者不方便被其他人看到,就需要隐藏运行的进程.或者某些攻击者采用了本文介绍的隐藏技术,也可以让大家看到如何进行对抗. 隐藏有两种方法: kernel 层面,不对用户 ...
- 墨者学院靶场:uWSGI(CVE-2018-7490)路径遍历漏洞复现
0x01漏洞简介 uWSGI是一款Web应用程序服务器,它实现了WSGI.uwsgi和http等协议.uWSGI 2.0.17之前版本中存在路径遍历漏洞,该漏洞源于程序没有正确的处理DOCUMENT_ ...
- Java并发编程实战 02Java如何解决可见性和有序性问题
摘要 在上一篇文章当中,讲到了CPU缓存导致可见性.线程切换导致了原子性.编译优化导致了有序性问题.那么这篇文章就先解决其中的可见性和有序性问题,引出了今天的主角:Java内存模型(面试并发的时候会经 ...
- GeoGebra重复手段实现
1.自定义工具部分可以在网上搜一些别人做的工具,主要是把自己经常做的一些任务做成工具,减少重复过程 2.列表部分的简单操作如图所示,实现对三个点的多项式拟合 3.通过序列指令格式可以做一个好玩的效果, ...
- Daily Scrum 12/25/2015
Process: Zhaoyang: Implement the Alex 50M model in the Caffe framework. Yandong: The Azure Back end ...
