Android组件位移动画实现

Android中存在几种动画,包括补间动画、帧动画以及属性动画(Android3.0之后,现在应该没有3.0以下的设备了吧),这几种动画实现的原理是不同的:
①补间动画:又叫视图动画,包括一般视图的平移、旋转、缩放、透明度等,是通过确定组件 的开始状态和结束状态,由系统进行补全
②帧动画:通过每一帧的播放产生动画
③属性动画:通过修改view的属性来实现动画效果
所以补间动画不会修改view的实际位置,而属性动画则会

之所以要做组件的位移动画,是因为最近在仿写GankIO的Flutter官方客户端,客户端第一页的日历显示与隐藏就是平移滑动:
Android组件位移动画实现_第1张图片
这里提供一种实现:

if (calendarRecyclerView.getVisibility() == View.VISIBLE) {
    TranslateAnimation mShowAction = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0.0f,
        Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF,
        0.0f, Animation.RELATIVE_TO_SELF, -1.0f);
    mShowAction.setDuration(150);
    calendarRecyclerView.startAnimation(mShowAction);
    calendarRecyclerView.setVisibility(View.GONE);
} else {
    //-1.0表示控件初始值
    TranslateAnimation mHiddenAction = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0.0f,
        Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF,
        -1.0f, Animation.RELATIVE_TO_SELF, 0.0f);
    mHiddenAction.setDuration(150);
    calendarRecyclerView.startAnimation(mHiddenAction);
    calendarRecyclerView.setVisibility(View.VISIBLE);
}

mShowAction是隐藏动画,mHiddenAction 是显示动画

你可能感兴趣的:(Android组件位移动画实现)