View使用总结
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使用总结的更多相关文章
- 虾扯蛋:Android View动画 Animation不完全解析
本文结合一些周知的概念和源码片段,对View动画的工作原理进行挖掘和分析.以下不是对源码一丝不苟的分析过程,只是以搞清楚Animation的执行过程.如何被周期性调用为目标粗略分析下相关方法的执行细节 ...
- MVVM模式解析和在WPF中的实现(五)View和ViewModel的通信
MVVM模式解析和在WPF中的实现(五) View和ViewModel的通信 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 M ...
- Android 判断一个 View 是否可见 getLocalVisibleRect(rect) 与 getGlobalVisibleRect(rect)
Android 判断一个 View 是否可见 getLocalVisibleRect(rect) 与 getGlobalVisibleRect(rect) [TOC] 这两个方法的区别 View.ge ...
- 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 错误. 总结一下发生错误的原因,一般的 ...
- SAP CRM 树视图(TREE VIEW)
树视图可以用于表示数据的层次. 例如:SAP CRM中的组织结构数据可以表示为树视图. 在SAP CRM Web UI的术语当中,没有像表视图(table view)或者表单视图(form view) ...
- 深入理解 Android 之 View 的绘制流程
概述 本篇文章会从源码(基于Android 6.0)角度分析Android中View的绘制流程,侧重于对整体流程的分析,对一些难以理解的点加以重点阐述,目的是把View绘制的整个流程把握好,而对于特定 ...
- Android listview和gridview以及view的区别
GridView 可以指定显示的条目的列数. listview一般显示的条目的列数都是一列 如果是列表(单列多行形式)的使用ListView,如果是多行多列网状形式的优先使用GridView andr ...
- mono for android Listview 里面按钮 view Button click 注册方法 并且传值给其他Activity 主要是context
需求:为Listview的Item里面的按钮Button添加一个事件,单击按钮时通过事件传值并跳转到新的页面. 环境:mono 效果: 布局代码 主布局 <?xml version=" ...
- Android中自定义样式与View的构造函数中的第三个参数defStyle的意义
零.序 一.自定义Style 二.在XML中为属性声明属性值 1. 在layout中定义属性 2. 设置Style 3. 通过Theme指定 三.在运行时获取属性值 1. View的第三个构造函数的第 ...
- 简单例子了解View的事件分发
什么是事件分发 我们在写自定义ViewGroup或者自定义View的时候经常要处理用户的点击事件,如果我们的View在最底层,他在很多ViewGroup里面,我们如何让我们的点击事件准确传递到View ...
随机推荐
- Java常用工具——java包装类
一.包装类和基本数据类型 装箱:基本数据类型——包装类 拆箱:包装类——基本数据类型 package com.imooc.wrap; public class WrapTestOne { public ...
- 测开之路七十六:性能测试蓝图之html
<!-- 继承base模板 -->{% extends 'base.html' %} {% block script %} <!-- 从cdn引入ace edter的js --> ...
- jmeter之线程组循环次数
有时候压测需要配置并发的持续时间,这个可以在jmeter中线程组页面进行配置 1.jmeter的循环次数2种使用场景 2.持续时间功能介绍 3.持续时间的使用场景 1.jmeter的循环次数2种使用模 ...
- Bootstrap 学习笔记13 附加导航插件
附加导航代码: <style> a:focus { outline: none; } .nav-pills { width: 150px; } .nav-pills.affix { top ...
- SEC6 - MySQL 查询语句--------------进阶2:条件查询
# 进阶2:条件查询 /* 语法: select 查询列表 from 表名 where 筛选条件; 分类: 一.按照条件表达式筛选 条件运算符:> < = !=(等价于<>) ...
- Recurrent Neural Network(1):Architecture
Recurrent Neural Network是在单个神经元上,除了输入与输出外,添加了一条Recurrent回路.也就是说,节点当前的状态将会影响其未来的状态.下式可以表征此关系: st= f(s ...
- HTML DOM cursor 属性
值 描述 url 需被使用的自定义光标的URL 注释:请在此列表的末端始终定义一种普通的光标,以防没有由 URL 定义的可用光标. default 默认光标(通常是一个箭头) auto 默认.浏览器设 ...
- 合并石子 (区间dp+前缀和)
[题目描述] N堆石子.现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的得分.计算出将N堆石子合并成一堆的最小得分. [题目链接] http: ...
- 修改 IIS 默认文件上传大小
IIS 7 默认文件上传大小是30M 要突破这个限制: 修改IIS的applicationhost.config 打开 c:/windows/system32/inetsrv/config/appli ...
- python时间的获取
一.获取当前时间 import datetime # 2019-7-9 print(datetime.datetime.now().year) # 2019 print(datetime.dateti ...