SurfaceView介绍
普通 View 的绘制和用户响应都在 UI 主线程。耗时操作要丢到别的线程,否则会卡住界面;但后台线程又不能改 UI,例如在自定义 View 的 onDraw 里从工作线程刷新是不允许的。 需要在别的线程画界面、要迅速刷新、或渲染很耗时,就用 SurfaceView。它内嵌一个 Surface,可以…
普通 View 的绘制和用户响应都在 UI 主线程。耗时操作要丢到别的线程,否则会卡住界面;但后台线程又不能改 UI,例如在自定义 View 的 onDraw 里从工作线程刷新是不允许的。 需要在别的线程画界面、要迅速刷新、或渲染很耗时,就用 SurfaceView。它内嵌一个 Surface,可以…
广告栏轮子很好找,但完全合用的并不多:有的绑死 Picasso 吃内存,有的少于三页就抛异常。本篇从 ViewPager 起步,一步步补上无限轮播、切换速度、自动播放、指示器和点击回调,造一个够用的 Banner。 开源界有一句很有名的话叫“不要重复发明轮子”,当然,我今天的观点不是要反驳这句话,轮…
很多项目都要做图片选择和上传。不必重复造轮子,选一个现成的图片选择器库,就能做出类似 QQ、微信的选图体验,再补上上传即可。 一、效果与原库 选择器效果如下: 原码地址:https://github.com/easonline/AndroidImagePicker 这个选择器带了单选、多选、剪切、预…
Android 控件大致分两类:ViewGroup 当容器管 View,View 自己负责绘制。整棵界面像 DOM 树:父视图负责测量、定位、绘制。findViewById 之所以贵,是因为它从上到下遍历整棵控件树找实例,重复操作里尽量少用。 一、关于 Android View 控件 现在常用控件大…
退出 Android 应用,常见做法是容器收齐 Activity、广播 finish,或直接杀进程。更稳的是把首页做成 singleTask,再配合退出广播。 一、容器式 建一个全局容器,把所有 Activity 存进去,退出时循环 finish: import java.util.ArrayLis…
ProgressBar 用来把操作进度可视化,还可以带一条次要进度(例如流媒体缓冲)。它有确定模式和不确定模式:不确定时转圈循环动画,适合任务时长未知。SeekBar 继承自 ProgressBar,区别是用户可以拖动手动调进度。 一、ProgressBar 样式怎么写 样式有两套写法:直接点 Wi…
App 主界面常用底部选项卡(Tab)做入口。本篇讲较古老的一套:TabActivity + TabHost:布局三区、系统页卡、再用自定义 View 换图标和文字选中态。FragmentActivity 方案另文再写。 一、Tab 主界面长什么样 先看一个底部页卡的 App 主界面:点不同 Tab…
对话框顾名思义即人与应用系统对话交互的窗口:登录时检查用户信息可以用对话框提示,退出应用时也可以弹出退出确认。只要涉及到交互的地方都可以使用对话框。 一个对话框一般是出现在当前 Activity 之上的一个小窗口。下面的 Activity 失去焦点,对话框接受所有用户交互。对话框一般用于提示信息和与…
在 Android 里量控件宽高,onCreate 里直接 getHeight() / getMeasuredWidth() 经常是 0:界面还没走完 measure / layout。本文汇总控件、状态栏、标题栏、屏幕和内容区的取法,并用 PopupWindow 把这些尺寸串起来。 一、为什么 o…
今天要讲的是 Activity 的四种 launchMode。launchMode 在多个 Activity 跳转过程中很重要:是否生成新实例、是否重用已存在实例、是否和其他实例共用一个 task。task 是具有栈结构的对象,一个 task 可以管理多个 Activity;启动一个应用,也就创建与…