自定义view

Android View 绘制流程

前提是你 提交于 2020-03-25 09:29:09
Android 中 Activity 是作为应用程序的载体存在,代表着一个完整的用户界面,提供了一个窗口来绘制各种视图,当 Activity 启动时,我们会通过 setContentView 方法来设置一个内容视图,这个内容视图就是用户看到的界面。 PhoneWindow 是 Android 系统中最基本的窗口系统,每个 Activity 会创建一个。PhoneWindow 是 Activity 和 View 系统交互的借口。DecorView 本质上是一个 FrameLayout,是 Activity 中所有 View 的祖先。 绘制的整体流程 当一个应用启动时,会启动一个主 Activity,Android 系统会根据 Activity 的布局来对它进行绘制。绘制会从根视图 ViewRoot 的 performTraversals() 方法开始,从上到下遍历整个视图树,每个 View 控制负责绘制自己,而 ViewGroup 还需要负责通知自己的子 View 进行绘制操作。视图操作的过程可以分为三个步骤,分别是测量(Measure)、布局(Layout)和绘制(Draw)。performTraversals 方法在 类 ViewRootImpl 内,其核心代码如下。 int childWidthMeasureSpec = getRootMeasureSpec(mWidth,

十天冲刺-03

瘦欲@ 提交于 2020-03-23 11:09:19
会议内容: 刘津鑫: 昨天:学习了Androidstudio的自定义View,寻找到了日历的控件 今天:完成日历控件的引用 遇到的问题:最初找到日历控件时不知道原理,后来知道是通过自定义View实现的,就去学习了自定义View 高宇: 昨天:学习并制做了一个单选按钮,来实现消费类型的选择 今天:将这些值获取,并将其添加到数据库中,已经建好的数据库中 遇到的问题是:昨天在尝试获取值并输出在界面的时候出错 李秦: 昨天:初步实现了对sqlite中数据的增删改查 今天:准备深入学习有关sqlite的操作 遇到的困难:如何在点击增删改查的按钮跳转到一个以小窗口形式出现的Activity进行显示和输入数据 王学云: 昨天:实现了退出账户的功能 今天:对个人信息进行修改 遇到的问题:点击时有很长的延迟 站立会议图片: 燃尽图: 任务看板: 来源: https://www.cnblogs.com/WLLG/p/10754243.html

开发自定义控件的步骤

那年仲夏 提交于 2020-03-23 07:20:20
开发自定义控件的步骤: 1、了解View的工作原理 2、 编写继承自View的子类 3、 为自定义View类增加属性 4、 绘制控件 5、 响应用户消息 6 、自定义回调函数 一、View结构原理 Android系统的视图结构的设计也采用了组合模式,即View作为所有图形的基类,Viewgroup对View继承扩展为视图容器类。 View定义了绘图的基本操作 基本操作由三个函数完成:measure()、layout()、draw(),其内部又分别包含了onMeasure()、onLayout()、onDraw()三个子方法。具体操作如下: 1、measure操作 measure操作主要用于计算视图的大小,即视图的宽度和长度。在view中定义为final类型,要求子类不能修改。measure()函数中又会调用下面的函数: (1)onMeasure(),视图大小的将在这里最终确定,也就是说measure只是对onMeasure的一个包装,子类可以覆写onMeasure()方法实现自己的计算视图大小的方式,并通过setMeasuredDimension(width, height)保存计算结果。 2、layout操作 layout操作用于设置视图在屏幕中显示的位置。在view中定义为final类型,要求子类不能修改。layout()函数中有两个基本操作: (1)setFrame(l,t

Android进阶笔记16:onInterceptTouchEvent、onTouchEvent与onTouch

笑着哭i 提交于 2020-03-22 02:36:11
1. onTouch方法 : onTouch方法是 View的 OnTouchListener借口中定义的方法,处理View及其子类被touch是的事件处理 。 当一个View绑定了OnTouchLister后,当有touch事件触发时,就会调用onTouch方法。 当然,前提是touch时间能够传递到指定的view。Q1:为什么会传递不到呢? (当把手放到View上后,onTouch方法被一遍一遍地被调用) 1 /** 2 * Interface definition for a callback to be invoked when a touch event is 3 * dispatched to this view. The callback will be invoked before the touch 4 * event is given to the view. 5 */ 6 public interface OnTouchListener { 7 /** 8 * Called when a touch event is dispatched to a view. This allows listeners to 9 * get a chance to respond before the target view. 10 * 11 * @param v The

Android运行时异常“Binary XML file line # : Error inflating class”

让人想犯罪 __ 提交于 2020-03-21 23:35:27
在原生Android下编译APK,编译没有问题,但是在运行的时候经常出现如标题所描述的异常,然后整个程序Crash掉...... 我遇到该问题常常都是因为修改了资源文件所引起,大致有以下几种方式来解决: 1. 引用类名问题 :自定义了一个View,将他用于布局文件中,假设他的包名叫MyPackage,类名叫MyTestView,这个时候你在XML作为布局元素来布局的话,必须使用完整路径名,也就是包名加类名来引用,用MyPackage.MyTestView来进行引用。 2. 构造函数问题 :自定义一个View,必须派生实现基类View的三个构造函数 View(Context context) //Simple constructor to use when creating a view from code View(Context context, AttributeSet attrs) //Constructor that is called when inflating a view from XML View(Context context, AttributeSet attrs, int defStyle) //Perform inflation from XML and apply a class-specific base style 从文档上的介绍来看

Intent详解

喜你入骨 提交于 2020-03-21 06:34:36
1、Intent的概念: Android中提供了Intent机制来协助应用间的交互与通讯,或者采用更准确的说法是,Intent不仅可用于应用程序之间,也可用于应用程序内部的activity, service和broadcast receiver之间的交互。Intent这个英语单词的本意是“目的、意向、意图”。 Intent是一种运行时绑定(runtime binding)机制,它能在程序运行的过程中连接两个不同的组件。通过Intent,你的程序可以向Android表达某种请求或者意愿,Android会根据意愿的内容选择适当的组件来响应。 activity、service和broadcast receiver之间是通过Intent进行通信的,而另外一个组件Content Provider本身就是一种通信机制,不需要通过Intent。我们来看下面这个图就知道了: 如果Activity1需要和Activity2进行联系,二者不需要直接联系,而是通过Intent作为桥梁。通俗来讲,Intnet类似于中介、媒婆的角色。 2、对于向这三种组件发送intent有不同的机制: 使用Context.startActivity() 或 Activity.startActivityForResult(),传入一个intent来启动一个activity。使用 Activity.setResult()

Android自定义控件View(一)

只谈情不闲聊 提交于 2020-03-20 03:38:32
虽然 Android API给我们提供了众多控件View来使用,但是鉴于Android的开发性,自然少不了根据需求自定义控件View了。比如说QQ头像是圆形的,但是纵观整个Android控件也找不到一个加载圆形图片的Button或者ImageView,那么咋办?废话,肯定是自定义一个圆形RoundImageView控件啦!这里我们可以继承ImageView重写里面的方法来实现这一效果。还有一种自定义控件是继承View重写里面的onDraw()方法,这类自定义View需要定义自己的属性以备在xml布局文件中使用。 自定义View的步骤 自定义View的属性 在自定义View的构造方法中获得View属性值 重写onMeasure(int,int)方法。(该方法可重写可不重写,具体看需求) 重写onDraw(Canvas canvas)方法。 在xml布局文件中如何使用自定义view的属性? 自定义View的属性 在res/values下面新建attrs.xml属性文件。我们看看atrrs.xml文件怎么写? <?xml version="1.0" encoding="utf-8"?> <resources> <!--name 是自定义属性名,一般采用驼峰命名,可以随意。 format 是属性的单位--> <attr name="titleSize" format="dimension"

七、图形与图像处理(1)

旧时模样 提交于 2020-03-17 07:44:05
1 使用简单图片 2 绘图 3 图形特效处理 4 逐帧(Frame)动画 5 补间(Tween)动画 6 属性动画 7 使用SurfaceView实现动画 1、Bitmap和BitmapFactory Bitmap代表一张位图,BitmapDrawable里封装的图片就是一个Bitmap对象。开发者为了把一个Bitmap对象包装成 BitmapDrawable对象。可以调用BitmapDrawable的构造器: // 把一个Bitmap对象包装成BitmapDrawable对象 BitmapDrawable drawable = new BitmapDrawable(bitmap); 如果需要获取BitmapDrawable所包装的Bitmap对象,则可调用BitmapDrawable的getBitmap(),如下代码所示: // 获取一个BitmapDrawable所包装的Bitmap对象。 Bitmap bitmap = drawable.getBitmap(); 除此之外,Bitmap还提供了一些静态方法来创建新的Bitmap对象,例如如下常用方法。 ● createBitmap(Bitmap source, int x, int y, int width, int height): 从源位图source的指定坐标点(给定x、y)开始,从中"挖取"宽width

Android 自定义控件之继承 ViewGroup 创建新容器(四)

[亡魂溺海] 提交于 2020-03-16 14:21:44
某厂面试归来,发现自己落伍了!>>> Android 自定义控件之继承 ViewGroup 创建新容器(四) 阅读 3311收藏 1522016-4-24 原文链接: http://blog.csdn.net/guiman/article/details/51225809 作者叫你如何自定义一个 ViewGroup —— 由 hanks 分享 欢迎大家来学习本节内容,前几节我们已经学习了其他几种自定义控件,分别是 自定义控件之对现有控件拓展(一) 、 自定义控件之直接继承View创建全新视图(二) 及 自定义控件之创建可以复用的组合控件(三) 还没有学习的同学请先去学习下,因为本节将使用到上几节所讲述的内容。 在学习新内容之前,我们先来弄清楚两个问题: 1 . 什么是ViewGroup? ViewGroup是一种容器。它包含零个或以上的View及子View。 2 . ViewGroup有什么作用? ViewGroup内部可以用来存放多个View控件,并且根据自身的测量模式,来测量View子控件,并且决定View子控件的位置。这在下面会逐步讲解它是怎么测量及决定子控件大小和位置的。 ok,弄清楚了这两个问题,那么下面我们来学习下自定义ViewGroup吧。 首先和之前几节一样,先来继承ViewGroup,并重写它们的构造方法。 public class CustomViewGroup

Android运行时异常“Binary XML file line # : Error inflating class”

こ雲淡風輕ζ 提交于 2020-03-15 02:05:10
转:http://blog.csdn.net/huangxiaohu_coder/article/details/8497286 在原生Android下编译APK,编译没有问题,但是在运行的时候经常出现如标题所描述的异常,然后整个程序Crash掉...... 我遇到该问题常常都是因为修改了资源文件所引起,大致有以下几种方式来解决: 1. 引用类名问题:自定义了一个View,将他用于布局文件中,假设他的包名叫MyPackage,类名叫MyTestView,这个时候你在XML作为布局元素来布局的话,必须使用完整路径名,也就是包名加类名来引用,用MyPackage.MyTestView来进行引用。 2.构造函数问题:自定义一个View,必须派生实现基类View的三个构造函数 View(Context context) //Simple constructor to use when creating a view from code View(Context context, AttributeSet attrs) //Constructor that is called when inflating a view from XML View(Context context, AttributeSet attrs, int defStyle) //Perform inflation