在Android设计中, 经常会使用卡片元素, 正面显示图片或主要信息, 背面显示详细内容, 如网易有道词典的单词翻转和海底捞的食谱展示. 实现卡片视图非常容易, 那么如何实现翻转动画呢?

在TB吃海底捞时, 使用Pad点餐, 发现应用的食谱功能使用卡片控件, 就准备和大家分享一下实现方式. 有兴趣的朋友可以去海底捞看看:)

本文源码的GitHub下载地址

首页

首页由正面和背面两张卡片组成, 同时, 设置点击事件flipCard.

android:id="@+id/main_fl_container"

xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:onClick="flipCard"

android:paddingBottom="@dimen/activity_vertical_margin"

android:paddingLeft="@dimen/activity_horizontal_margin"

android:paddingRight="@dimen/activity_horizontal_margin"

android:paddingTop="@dimen/activity_vertical_margin"

tools:context="me.chunyu.spike.wcl_flip_anim_demo.MainActivity">

layout="@layout/cell_card_back"/>

layout="@layout/cell_card_front"/>

逻辑, 初始化动画和镜头距离.

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

ButterKnife.bind(this);

setAnimators(); // 设置动画

setCameraDistance(); // 设置镜头距离

}

动画

初始化右出(RightOut)和左入(LeftIn)动画, 使用动画集合AnimatorSet.

当右出动画开始时, 点击事件无效, 当左入动画结束时, 点击事件恢复.

// 设置动画

private void setAnimators() {

mRightOutSet = (AnimatorSet) AnimatorInflater.loadAnimator(this, R.animator.anim_out);

mLeftInSet = (AnimatorSet) AnimatorInflater.loadAnimator(this, R.animator.anim_in);

// 设置点击事件

mRightOutSet.addListener(new AnimatorListenerAdapter() {

@Override publicvoid onAnimationStart(Animator animation) {

super.onAnimationStart(animation);

mFlContainer.setClickable(false);

}

});

mLeftInSet.addListener(new AnimatorListenerAdapter() {

@Override publicvoid onAnimationEnd(Animator animation) {

super.onAnimationEnd(animation);

mFlContainer.setClickable(true);

}

});

}

右出动画

android:duration="@integer/anim_length"

android:propertyName="rotationY"

android:valueFrom="0"

android:valueTo="180"/>

android:duration="0"

android:propertyName="alpha"

android:startOffset="@integer/anim_half_length"

android:valueFrom="1.0"

android:valueTo="0.0"/>

旋转180°, 当旋转一半时, 卡片消失.

左入动画

android:duration="0"

android:propertyName="alpha"

android:valueFrom="1.0"

android:valueTo="0.0"/>

android:duration="@integer/anim_length"

android:propertyName="rotationY"

android:valueFrom="-180"

android:valueTo="0"/>

android:duration="0"

android:propertyName="alpha"

android:startOffset="@integer/anim_half_length"

android:valueFrom="0.0"

android:valueTo="1.0"/>

在开始时是隐藏, 逆向旋转, 当旋转一半时, 显示卡片.

镜头视角

改变视角, 涉及到旋转卡片的Y轴, 即rotationY, 需要修改视角距离.

如果不修改, 则会超出屏幕高度, 影响视觉体验.

// 改变视角距离, 贴近屏幕

private void setCameraDistance() {

intdistance = 16000;

floatscale = getResources().getDisplayMetrics().density * distance;

mFlCardFront.setCameraDistance(scale);

mFlCardBack.setCameraDistance(scale);

}

旋转控制

设置右出和左入动画的目标控件, 两个动画同步进行, 并区分正反面朝上.

// 翻转卡片

publicvoid flipCard(Viewview) {

// 正面朝上

if (!mIsShowBack) {

mRightOutSet.setTarget(mFlCardFront);

mLeftInSet.setTarget(mFlCardBack);

mRightOutSet.start();

mLeftInSet.start();

mIsShowBack = true;

} else{ // 背面朝上

mRightOutSet.setTarget(mFlCardBack);

mLeftInSet.setTarget(mFlCardFront);

mRightOutSet.start();

mLeftInSet.start();

mIsShowBack = false;

}

}

动画效果

动画效果非常简单, 全部逻辑都不足50行, 这么好玩的动画, 用起来吧.

OK, that’s all! Enjoy it!

【编辑推荐】

【责任编辑:枯木 TEL:(010)68476606】

点赞 0

Android,翻转卡片动画,实现翻转卡片的动画效果相关推荐

  1. android 卡片旋转动画,Android-显示卡片翻转的动画片效果

    Android---显示卡片翻转的动画效果 本文译自:http://developer.android.com/training/animation/cardflip.html 本文介绍如何是一个自定 ...

  2. android左右旋转动画效果图,Android新姿势:3D翻转效果原理

    首先,android里是没有3D翻转的动画效果的,但是呢,android有提供一个Camera的类,可以利用这个类来实现. 先看代码,Rotate3d是继承了Animation的一个动画类,多余的代码 ...

  3. android开发上下翻转动画,怎么在android中利用FlipAnimation实现一个3D垂直翻转动画...

    怎么在android中利用FlipAnimation实现一个3D垂直翻转动画 发布时间:2021-02-20 17:08:30 来源:亿速云 阅读:122 作者:Leah 这期内容当中小编将会给大家带 ...

  4. android属性动画实现翻卡片抽奖

    最近项目需要用到京东的签到功能,所以就模仿京东的签到写了一个demo.(文章底部有demo) 先看效果 demo上主要使用了有2个知识点,一个是属性动画,一个是canvas. 属性动画:使用了旋转,透 ...

  5. Android基于GridView的卡牌翻转小游戏

    最近无聊,一时心血来潮,倒腾倒腾Android编程.自己略有写java基础,就不想拿起教程从头学起,直接以应用为导向,在实际应用中巩固和拓展java编程.搞个什么应用了,Hello World!没意思 ...

  6. android 高仿 探探卡片滑动,Android自定义View仿探探卡片滑动效果

    Android自定义View仿探探卡片滑动这种效果网上有很多人已经讲解了实现思路,大多都用的是RecyclerView来实现的,但是我们今天来换一种实现思路,只用一个自定义的ViewGroup来搞定这 ...

  7. Android NFC读MifareClassic卡获取卡片ID 类型 扇区 存储空间

    1.首先要在AndroidManifest.xml中声明如下配置信息: 为了能够使用Android手机的NFC功能,需要在Manifest文件中添加相应的权限: 详细配置请参考-->Androi ...

  8. js 卡片交换动画,网格卡片交换动画,排序算法动画,三消游戏交换动画

    平铺卡片交换动画: 网格卡片交换动画: 排序算法动画: 代码: <!DOCTYPE html> <html lang="en"><head>&l ...

  9. Android(Lollipop/5.0) Material Design(七) 自定义动画

    Material Design系列 Android(Lollipop/5.0) Material Design(一) 简介 Android(Lollipop/5.0) Material Design( ...

最新文章

  1. r语言 col_R语言代码相关疑问标准提问
  2. C++ Primer笔记12_运算符重载_递增递减运算符_成员訪问运算符
  3. android出现adpt2的问题,android - 尝试在空对象引用上调用接口方法'int android.database.Cursor.getCount()'[重复] - 堆栈内存溢出...
  4. 【独家】玩流量,先读懂数据再说吧!PM玩转流量课程笔记大放送
  5. 5 可隐藏的侧栏_6种隐藏式设计,不仅实用,而且更显高级!
  6. php 自旋锁,Linux内核自旋锁使用笔记
  7. 常用自动化框架简单的分析与介绍
  8. 【文末有福利】卷积学习与图像识别的技术发展
  9. 10个性鼠标指针主题包_游戏鼠标推荐
  10. Ajax同步链接在IE 与FireFox的使用差别 open(GET,url,false)
  11. 吐血整理!顶级程序员的百宝箱来咯!| 原力计划
  12. 2017普实软件迎新年会报道
  13. Mit6.824-lab3a-2022
  14. Seating Arrangement CSU - 1997 (思维题,是否存在n个数的序列,使得相邻啷个数的差绝对值大于d)
  15. PyCharm 不能自动生成函数注释
  16. Shell-01Shell初相识
  17. Revit插件中的“喷淋对齐”“链接CAD”功能操作
  18. 【无标题】VisualC++逆序存放
  19. STM32中的串口通信的基础知识
  20. 销售开发新客户的渠道

热门文章

  1. 魔方cfop公式软件_【初级篇】(八)最简单的三阶魔方入门教程——顶棱还原...
  2. 原神绯樱虾仙贝怎么获得
  3. 本科studying abroad 无法毕业申请硕士转学转校处理一切studying abroad 问题
  4. python中的df是什么意思_python df遍历的N种方式
  5. 女性每天喝酸奶的好处是什么?
  6. 双光子荧光成像_为什么双光子成像如此重要?
  7. 大数开根 高精度 平方根
  8. 打造移动应用与游戏安全防线,腾讯WeTest安全服务全线升级
  9. 又java基础学php多久_php自学需要多久?
  10. Opensource Licenses