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属性动画完全解析(上),初识属性动画的基本用法

原创粉丝点击