Android 面试题之动画 + 事件处理篇,腾讯、美团 Android 面试经验分享
提示:秋招在即,计蒙准备在国庆假期结束前整理一套 Android 初级面试题籍,希望对大家有所帮助
提示:以下是本篇文章正文内容
=================================================================
帧动画、补间动画、属性动画
可以将动画组合在一起使用 AnimatorSet,
AnimatorSet.play() 播放当前动画的同时可以
.with() :将现有动画和传入的动画同时执行
.after() :将现有动画插入到传入的动画之后执行
.before() : 将现有动画插入到传入的动画之前执行
AccelerateDecelerateInterpolator :在动画开始与结束的地方速率改变比较慢,在中间的时候加速
AccelerateInterpolator:在动画开始的地方速率改变比较慢,然后开始速率变化加快
LinearInterpolator:以常量速率改变
AnticipateInterpolator:开始的时候向后然后向前甩
PathInterpolator:动画执行的效果按贝塞尔曲线
anticipateOvershootInterpolator:开始的时候向后然后向前甩一定值后返回最后的值
CycleInterpolator:动画循环播放特定的次数,速率改变沿着正弦曲线
OvershootInterpolator:向前甩一定值后再回到原来位置
BounceInterpolator:动画结束的时候有弹起效果
写一个类实现 Interpolator 接口,
Interpolator 是一个空的接口继承了 TimeInterpolator 接口,
定义 getInterpolation 方法即可
可以通过两种方式,一是通过定义 Activity 的主题,二是通过覆写 Activity 的 overridePendingTransition 方法。
===================================================================
Handler 能充当子线程和主线程之间的桥梁。
通常将 Handler 声明在 Activity 中,然后覆写 Handler 中的 handleMessage 方法,当子线程调用 handler.sendMessage()方法后 handleMessage 方法就会在主线程中执行。
这里面除了 Handler、Message 外还有隐藏的 Looper 和 MessageQueue 对象。在主线程中 Android 默认已经调用了 Looper.preper()方法,调用该方法的目的是在 Looper 中
创建 MessageQueue 成员变量并把 Looper 对象绑定到当前线程中。当调用 Handler 的 sendMessage(对象)方法的时候就将 Message 对象
添加到了 Looper 创建的 MessageQueue 队列中,同时给 Message 指定了 target 对象,其实这个 target 对象就是 Handler 对象。主线程默认执行了 Looper.looper()方法,该方法从 Looper 的成员变量 MessageQueue 中取出 Message。
然后调用 Message 的 target 对象的 handleMessage()方法。这样就完成了整个消息机制。
2、onTouch 和 onTouchEvent 有什么区别
这两个方法都是在 View 的 dispatchTouchEvent 中调用的,onTouch 优先于 onTouchEvent 执行。如果在 onTouch 方法中通过返回 true 将事件消费掉,onTouchEvent 将不会再执行。
评论