Android部分知识点事件和动画

2021-03-27  本文已影响0人  黑铁选手

事件

事件就是当用户触摸屏幕所产生的点击事件(Touch Event),其相关细节被封装成MotionEvent对象

事件类型

事件分发

把点击事件传递到某个对应的View上,并处理的过程

事件分发顺序

Activity -> ViewGroup -> View

事件分发顺序
注解:dispatch(分发)
在ViewGroup中可以通过onInterceptTouchEvent方法对事件传递进行拦截onInterceptTouchEvent方法返回true代表不允许事件继续向子View传递,返回false代表不对事件进行拦截,默认返回false。而View中没有onInterceptTouchEvent方法。
子View中如果将传递的事件消费掉,ViewGroup中将无法接收到任何事件。

事件传递机制最重要的三个方法:dispatchTouchEvent()分发事件、onInterceptTouchEvent()拦截事件、onTouchEvent()消费事件。

动画 Animation

分类:属性动画(property Animation)、视图动画(逐帧动画(Frame Animation)、补间动画(Tween Animation))


三种动画之间的继承关系

逐帧动画(Frame Animation)

把静态图片放入res/drawable目录下面,快速播放形成动画,实现方式有xml和Java,推荐使用xml

XML创建:
通过创建Animation_list.xml定义动画,在xml文件中每个item对应一帧(一张图片),drawable配置当前显示的界面,duration图片显示的时长。MainActivity中通过imageview.getDrawable实例化AnimationDrawabel对象,由animationdrawable调用start和stop来启动或暂停动画。

Java代码创建:
将图片资源保存到drawable目录下面,代码中将图片资源保存到整型数组中;通过new实例化AnimationDrawable对象,for循环遍历图片资源的整型数组然后由animationdrawable对象调用addFrame()方法来添加图片;最后把animationdrawable通过setImageDrawable添加到显示的控件上面。同样调用start和stop来启动或暂停动画。

补间动画(Tween Animation)

只指定图片开始和图片结束的“关键帧”,“中间帧”由系统计算并补齐
通过AnimationUtils.loadAnimation()来加载动画,startAnimation来启动动画
分类:
位移:Translate Animation
缩放: Scale Animation
透明度:Alpha Animation
旋转: Rotate Animation

XML创建四种方式共有属性:

共有的Java方法:

插值器:
系统内置插值器

自定义插值器
本质根据动画的进度(0%-100%)改变当前属性的值
实现方式:实现Interpolator/TimeInterpolator接口,重写getInterpolator()方法
补间动画实现Interpolator接口,属性动画实现TimeInterpolator接口(用于兼容Interpolator接口)

// Interpolator接口
public interface Interpolator {  

    // 内部只有一个方法
     float getInterpolation(float input) {  
         // 参数说明
         // input值值变化范围是0-1,且随着动画进度(0% - 100% )均匀变化
         // 即动画开始时,input值 = 0;动画结束时input = 1
         // 而中间的值则是随着动画的进度(0% - 100%)在0到1之间均匀增加
         ...
         // 插值器的计算逻辑

      return xxx;
      // 返回的值就是用于估值器继续计算的fraction值,下面会详细说明
    }  

// TimeInterpolator接口
// 同上
public interface TimeInterpolator {  
  
    float getInterpolation(float input);  
   
}

平移独有特性:

缩放独有特性:

//缩放轴点取值类型:数值,百分比,百分比p
//数值(如50):轴点为View的左上角的原点在x方向或y方向加上50px的点。
//百分比(如50%):轴点为View的左上角的原点在x方向加上自身宽度50%或y方向加上自身高度50%的点
//百分比p(如50%p):轴点为View的左上角的原点在x方向加上父控件宽度50%或y方向加上父控件高度50%的点。与旋转共享

旋转独有特性:

透明度独有特性:

组合动画

同时使用旋转,缩放,透明度,平移的动画称为组合动画
组合动画创建XML,需要使用<set></set>标签
组合动画Java方法:

动画高级使用

1、监听动画
通过给Animation设置Listener,监听动画的开始、结束、重复来进行一系列操作,例如:界面跳转等。
采用动画适配器,解决实现接口繁琐的问题:

anim.addListener(new AnimatorListenerAdapter() {  
// 向addListener()方法中传入适配器对象AnimatorListenerAdapter()
// 由于AnimatorListenerAdapter中已经实现好每个接口
// 所以这里不实现全部方法也不会报错
    @Override  
    public void onAnimationStart(Animator animation) {  
    // 如想只想监听动画开始时刻,就只需要单独重写该方法就可以
    }  
}); 
补间动画原理

属性动画

补间动画只能作用在View上,无法对非View的对象进行动画操作;且补间动画没有改变View属性,只改变了视觉效果,以及动画效果单一。
属性动画是通过在一定时间间隔内不断对值进行改变和将该值赋值给对象,实现从对象属性上产生动画效果。


属性动画原理

参考文献:

http://182.254.228.71/

上一篇下一篇

猜你喜欢

热点阅读