1. View的基础知识

View的位置参数 —— 相对于父容器的位置

view在平移时,top和left表示的是原始左上角位置信息,值不会改变,

改变的是x,y(View左上角坐标),translateX,translateY(view左上角相对于父容器的偏移量)

x = left + translateX
        y = top + translateY

TouchSlop —— 系统所能识别出的被认为是滑动的最小距离,通过 ViewConfiguration.get(getContext()).getScaledTouchSlop()获得

VelocityTracker —— 速度追踪,用于追踪手指在滑动过程中的速度(手指单位时间内滑过的像素数)

GestureDetector —— onScroll(由一个DOWN和若干MOVE组成,拖动)

—— onFling(由一个DOWN,若果MOVE,一个UP组成,快速滑动)

Scroller —— 弹性滑动对象,用于实现View的弹性滑动

调用scrollTo或scrollBy方法来进行滑动时,过程是瞬间的,

Scroller和View的computeScroll方法配合使用,可以让View实现过渡效果的滑动

2. View的滑动

有三种方法实现滑动:

(1) 通过View本身提供的ScrollTo/ScrollBy方法实现

只能改变View中内容的位置,不能改变view在布局中的位置;

(2)通过动画给View施加平移效果

Android3.0以上并采用属性动画,能改变View本身的属性;

Android3.0以下的属性动画或view动画,均不能改变View本身的属性,即点击位置还是以前的位置

如果动画不需要响应用户的交互,那么使用动画做滑动比较合理,且可以实现复杂的效果

(3) 通过改变View的LayoutParams使得View重新布局

使用复杂,适用于有交互的view;

3. 弹性滑动

(1) 使用Scroller(工作原理:配合View的computerScroll方法完成,不断让view重绘)

(2) 通过动画

(3) 使用延时策略

4. View的事件分发机制

(1) 点击事件的传递规则

优先级由高到低: OnTouchListener,  onTouchEvent,  OnClickListener

onTouchEvent返回false,那么它的父容器的onTouchEvent将会被调用

5. View的工作原理

view的测量流程 measure

view的布局流程 layout

view的绘制流程 draw

6. RemoteViews

它在其他进程中显示,提供了一组基础的操作用于跨进程更新它的界面

两种使用场景: 通知栏、 桌面小部件

7.SurfaceView

SurfaceView是用来进行游戏开发的,与一般View相比较为特殊的非常重要的类。

在单独的线程中绘图,不用阻塞UI线程,不需等待用户输入,可以控制动画的帧率(复杂游戏用SurfaceView来开发)。

SurfaceView提供直接访问一个可画图的界面,可以控制在界面顶部的子视图层。

SurfaceView是提供给需要直接画像素而不是使用窗体部件的应用使用的。

普通的view在UI线程中更新,需要用户输入的更新view可以用普通view,例如棋牌。

8. ListView 性能优化

可参考 http://www.cnblogs.com/itstudent/p/3729117.html

快速滑动时卡顿的原因:

每个子view都需要从视图层级中findeViewById;

ListView优化大致从以下几个角度:

(1). 复用已经生成的convertView,并设置tag;

(2). 添加viewHolder类;

(3). 缓存数据(图片缓存);

(4). 分页加载。

View使用总结的更多相关文章

  1. 虾扯蛋:Android View动画 Animation不完全解析

    本文结合一些周知的概念和源码片段,对View动画的工作原理进行挖掘和分析.以下不是对源码一丝不苟的分析过程,只是以搞清楚Animation的执行过程.如何被周期性调用为目标粗略分析下相关方法的执行细节 ...

  2. MVVM模式解析和在WPF中的实现(五)View和ViewModel的通信

    MVVM模式解析和在WPF中的实现(五) View和ViewModel的通信 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 M ...

  3. Android 判断一个 View 是否可见 getLocalVisibleRect(rect) 与 getGlobalVisibleRect(rect)

    Android 判断一个 View 是否可见 getLocalVisibleRect(rect) 与 getGlobalVisibleRect(rect) [TOC] 这两个方法的区别 View.ge ...

  4. android 使用Tabhost 发生could not create tab content because could not find view with id 错误

    使用Tabhost的时候经常报:could not create tab content because could not find view with id 错误. 总结一下发生错误的原因,一般的 ...

  5. SAP CRM 树视图(TREE VIEW)

    树视图可以用于表示数据的层次. 例如:SAP CRM中的组织结构数据可以表示为树视图. 在SAP CRM Web UI的术语当中,没有像表视图(table view)或者表单视图(form view) ...

  6. 深入理解 Android 之 View 的绘制流程

    概述 本篇文章会从源码(基于Android 6.0)角度分析Android中View的绘制流程,侧重于对整体流程的分析,对一些难以理解的点加以重点阐述,目的是把View绘制的整个流程把握好,而对于特定 ...

  7. Android listview和gridview以及view的区别

    GridView 可以指定显示的条目的列数. listview一般显示的条目的列数都是一列 如果是列表(单列多行形式)的使用ListView,如果是多行多列网状形式的优先使用GridView andr ...

  8. mono for android Listview 里面按钮 view Button click 注册方法 并且传值给其他Activity 主要是context

    需求:为Listview的Item里面的按钮Button添加一个事件,单击按钮时通过事件传值并跳转到新的页面. 环境:mono 效果: 布局代码 主布局 <?xml version=" ...

  9. Android中自定义样式与View的构造函数中的第三个参数defStyle的意义

    零.序 一.自定义Style 二.在XML中为属性声明属性值 1. 在layout中定义属性 2. 设置Style 3. 通过Theme指定 三.在运行时获取属性值 1. View的第三个构造函数的第 ...

  10. 简单例子了解View的事件分发

    什么是事件分发 我们在写自定义ViewGroup或者自定义View的时候经常要处理用户的点击事件,如果我们的View在最底层,他在很多ViewGroup里面,我们如何让我们的点击事件准确传递到View ...

随机推荐

  1. linux 复制到远程服务器

    scp 文件路径 root@192.168.0.1:文件夹路径 会提示你输入远程服务器密码

  2. Oracle 数据库优化

    Oracle 数据库优化 参考网址

  3. 【转载】阿里入局,独角兽估值30亿美金,谈谈RPA是什么

    缩短法定工作时间,已成国际劳动立法趋势,全球政府都曾面对这样的议题,过往企业IT也在思考这件事,开发出更好的软件系统帮助员工,就是普遍作法,这也已经行之有年,而现阶段最有效的作法,则是要用AI来提供帮 ...

  4. oracle blob 反序列化错误

    代码的目的是先将一个配置类JobConfig序列化存进Oracle中的Blob中,然后查的时候反序列化出来. 先看一下控制台报错 ### Cause: com.audaque.lib.core.exc ...

  5. Linux多线程服务器端编程

    目录 Linux多线程服务器端编程 线程安全的对象生命期管理 对象的销毁线程比较难 线程同步精要 借shared_ptr实现写时拷贝(copy-on-write) 多线程服务器的适用场合与常用编程模型 ...

  6. [Codeforces 364D]Ghd(随机算法+gcd)

    [Codeforces 364D]Ghd(随机算法) 题面 给出n个正整数,在其中选出n/2(向上取整)个数,要求这些数的最大公约数最大,求最大公约数的最大值 分析 每个数被选到的概率\(\geq \ ...

  7. luoguP1081 开车旅行 题解(NOIP2012)

    这道题是真滴火!(一晚上加一节信息课!) 先链接一下题目:luoguP1081 开车旅行 首先,这个预处理就极其变态,要与处理出每一个点往后走A会去哪里,B会去哪里.而且还必须O(nlogn)给它跑出 ...

  8. Yii中CreateUrl的使用总结

    在Yii中经常要生成URL,不管是为了自动跳转还是仅仅是一个链接.下面对Yii中的URL生成做了一个总结.提示:以下controllerX代表控制器X,actionX代表方法X.在Controller ...

  9. ubuntu18.04 搭建scrapy环境(连环踩坑+解决办法)

    ---恢复内容开始--- 预期需求: 打算搭建scrapy环境,基于python3.x的 环境描述: ubuntu18.04自带了python3.6,打算在虚拟环境vlenv中跑scrapy,装好虚拟 ...

  10. MySQL的数据类型:文本、数字、日期/时间

    在MySQL中,有三种主要的类型:文本.数字和日期/时间类型. 文本类型(text):数据类型                                 描述 CHAR(size) 保存固定长度 ...