Android UI 相关要点
来源:互联网 发布:三维产品动画演示软件 编辑:程序博客网 时间:2024/05/24 05:45
Android UI 相关要点
最近需求许多都是 UI 相关的,so 这里记录一下过程中遇到的坑和注意点。该帖子会不定期更新。
1. Touch 事件分发
事件的传递和分发是界面与用户的交互的基础,Android 是怎么设计这套分发规则的呢?只有了解这套规则我们才能更好地设计想要的交互效果。
关于 Android 的分发机制强烈推荐 guolin 的讲解,以下两篇分别讲解了单个 View 的事件传递和 ViewGroup 内的事件分发:
1. Android事件分发机制完全解析,带你从源码的角度彻底理解(上)
2. Android事件分发机制完全解析,带你从源码的角度彻底理解(下)
对于我而言,除了了解到基本的传递机制外,应用上的要点分别有:
- onTouchListener 和 onClick 是可共存的,其中 onClick 的实现在 onTouchEvent 方法中,注意控制返回值可以确保 touch 和 click 两者均得到预期的监听和响应。
public boolean dispatchTouchEvent(MotionEvent event) { if (mOnTouchListener != null && (mViewFlags & ENABLED_MASK) == ENABLED && mOnTouchListener.onTouch(this, event)) { return true; } return onTouchEvent(event); }
ViewGroup 是比子 View 更早获取到事件的,所以可通过 onInterceptTouchEvent 方法来确定要不要拦截事件,若拦截,则子 View 均接收不到事件;若不拦截,则看当前是否 touch 在可点击的子 View 中,如果是,则让子 View 消费掉这次事件。
由于有一个需求需要在纵向 ScrollView 中同时嵌套横向滑动子 View,并且两者互不影响。
这里就涉及到两者的滑动冲突解决问题。最后解决方案关键就是 onInterceptTouchEvent 这个方法。实现的方案参考了这个链接里的做法,不过手势略有修改:https://zhidao.baidu.com/question/616446526205551292.html
2.Animator 动画
由于公司的 APP 之前最低需兼容 API 8 的版本,所以之前一直使用 Animation 类来实现动画能力,也被称为补间动画。用过的人都知道,Animation 实现动画除了代码量大、不易管理、可读性较差外,还有许多的坑,比如改变位置后的按钮点击不了、动画组合时透明度的改变会有突变等。
最近公司开始支持最低 API 15,果断弃坑开始学习 Animator 来实现动画。Animator 是 API 11 加入的动画支持类,也被称为属性动画。果不其然,Animator 使用起来比 Animation 轻松愉悦许多,代码量也大大地减少,而且 Animator 不单可轻松地对 View 进行动画(ViewPropertyAnimator),还能对值进行动画,可以根据要求提供更多自定义动画的能力。所以条件允许地话,强烈推荐使用属性动画实现动画效果。
同样,关于属性动画的使用也强推郭神的博客:
Android属性动画完全解析(上),初识属性动画的基本用法
- Android UI 相关要点
- Android UI 设计要点
- android UI相关
- android UI相关
- android UI相关
- android UI相关类
- Android UE/UI相关
- Android UI相关知识
- android recovery ui相关
- Unity项目中UI同学需知的程序相关要点
- Unity项目中UI同学需知的程序相关要点
- Unity项目中UI同学需知的程序相关要点
- Unity项目中UI同学需知的程序相关要点
- Android UI图片制作相关
- Android UI 流畅度相关
- 总结Android手机应用UI设计的10个要点
- android 常用UI 之2--几种主要布局要点
- 一些Android UI的相关文章链接
- swift3.0 简单的网络图片缓存原理
- html的<ul>标签与<ol>标签
- PreparedStatement要点
- 【面经笔记】STL
- 01-中文编码
- Android UI 相关要点
- Kickstart Practice Round 2 2017 Problem A. Diwali lightings
- LightOJ1132---Summing up Powers (矩阵快速幂+二项式定理(简单推理))
- 使用命令行实现格式化
- C语言查找算法
- 设计一个类不能被继承 2.设计一个类只能在堆上创建对象。 3.设计一个类只能在栈上创建对象
- 字符转换为16进制数字
- c/c++动态内存管理
- JAVAWEB开发之权限管理(三)——shiro与企业项目整合开发(基于Spring)