返回顶部
首页 > 资讯 > 移动开发 >Android实现卡片翻转动画
  • 716
分享到

Android实现卡片翻转动画

动画Android 2022-06-06 04:06:07 716人浏览 八月长安
摘要

最近项目上用到了卡片的翻转效果,大致研究了下,也参考了网上的一些Demo,简单实现如下: activity_main.xml <?xml version=

最近项目上用到了卡片的翻转效果,大致研究了下,也参考了网上的一些Demo,简单实现如下:

activity_main.xml


<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout 
 xmlns:Android="Http://schemas.android.com/apk/res/android" 
 android:id="@+id/card_main_container" 
 android:layout_height="match_parent" 
 android:layout_width="match_parent"> 
 <include layout="@layout/activity_card_back"/> 
 <include layout="@layout/activity_card_front"/> 
</FrameLayout> 

可以看出,用到了两个布局

activity_card_back.xml


<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
 xmlns:android="http://schemas.android.com/apk/res/android" 
 android:id="@+id/card_back_container" 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" 
 android:layout_marginLeft="@dimen/activity_horizontal_margin" 
 android:layout_marginTop="@dimen/activity_vertical_margin" 
 android:layout_marginRight="@dimen/activity_horizontal_margin" 
 android:layout_marginBottom="@dimen/activity_vertical_margin" 
 android:background="@drawable/shape_card_back_bg" 
 android:orientation="vertical"> 
 <TextView 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" 
 android:gravity="center" 
 android:text="背面" 
 android:textSize="30sp"/> 
</LinearLayout>

activity_card_front.xml


<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
 xmlns:android="http://schemas.android.com/apk/res/android" 
 android:id="@+id/card_font_container" 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" 
 android:layout_marginLeft="@dimen/activity_horizontal_margin" 
 android:layout_marginTop="@dimen/activity_vertical_margin" 
 android:layout_marginRight="@dimen/activity_horizontal_margin" 
 android:layout_marginBottom="@dimen/activity_vertical_margin" 
 android:background="@drawable/shape_card_front_bg" 
 android:orientation="vertical"> 
 <TextView 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" 
 android:gravity="center" 
 android:text="正面" 
 android:textSize="30sp"/> 
</LinearLayout> 

附上自定义的图片:
shape_card_back_bg.xml


<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android"> 
 <corners android:radius="30dp"/> 
 <solid android:color="@android:color/holo_red_light"/> 
</shape> 

shape_card_front_bg.xml


<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android"> 
 <corners android:radius="30dp"/> 
 <solid android:color="@android:color/darker_gray"/> 
</shape> 

主要的逻辑如下:


package com.jackie.flipanimationdemo; 
import android.animation.Animator; 
import android.animation.AnimatorInflater; 
import android.animation.AnimatorListenerAdapter; 
import android.animation.AnimatorSet; 
import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.view.View; 
import android.widget.FrameLayout; 
import android.widget.LinearLayout; 
public class MainActivity extends AppCompatActivity implements View.OnClickListener { 
 private FrameLayout mCardMainContainer; 
 private LinearLayout mCardFontContainer, mCardBackContainer; 
 private AnimatorSet mRightOutAnimatorSet, mLeftInAnimatorSet; 
 private boolean mIsshowBack = false; //是否显示背面 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 initView(); 
 initEvent(); 
 } 
 private void initView() { 
 mCardMainContainer = (FrameLayout) findViewById(R.id.card_main_container); 
 mCardFontContainer = (LinearLayout) findViewById(R.id.card_font_container); 
 mCardBackContainer = (LinearLayout) findViewById(R.id.card_back_container); 
 setAnimators(); // 设置动画 
 setCameraDistance(); // 设置镜头距离 
 } 
 private void initEvent() { 
 mCardMainContainer.setOnClickListener(this); 
 } 
 private void setAnimators() { 
 mRightOutAnimatorSet = (AnimatorSet) AnimatorInflater.loadAnimator(this, R.animator.anim_right_out); 
 mLeftInAnimatorSet = (AnimatorSet) AnimatorInflater.loadAnimator(this, R.animator.anim_left_in); 
 // 设置点击事件 
 mRightOutAnimatorSet.addListener(new AnimatorListenerAdapter() { 
  @Override 
  public void onAnimationStart(Animator animation) { 
  super.onAnimationStart(animation); 
  mCardMainContainer.setClickable(false); 
  } 
 }); 
 mLeftInAnimatorSet.addListener(new AnimatorListenerAdapter() { 
  @Override 
  public void onAnimationEnd(Animator animation) { 
  super.onAnimationEnd(animation); 
  mCardMainContainer.setClickable(true); 
  } 
 }); 
 } 
 private void setCameraDistance() { 
 int distance = 16000; 
 float scale = getResources().getDisplayMetrics().density * distance; 
 mCardFontContainer.setCameraDistance(scale); 
 mCardBackContainer.setCameraDistance(scale); 
 } 
 private void flipCard() { 
 if (!mIsShowBack) { // 正面朝上 
  mRightOutAnimatorSet.setTarget(mCardFontContainer); 
  mLeftInAnimatorSet.setTarget(mCardBackContainer); 
  mRightOutAnimatorSet.start(); 
  mLeftInAnimatorSet.start(); 
  mIsShowBack = true; 
 } else { // 背面朝上 
  mRightOutAnimatorSet.setTarget(mCardBackContainer); 
  mLeftInAnimatorSet.setTarget(mCardFontContainer); 
  mRightOutAnimatorSet.start(); 
  mLeftInAnimatorSet.start(); 
  mIsShowBack = false; 
 } 
 } 
 @Override 
 public void onClick(View v) { 
 switch (v.getId()) { 
  case R.id.card_main_container: 
  flipCard(); 
  break; 
 } 
 } 
} 

用到一些动画的资源:

anim_left_in.xml


<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android"> 
 <!--消失--> 
 <objectAnimator 
 android:duration="0" 
 android:propertyName="alpha" 
 android:valueFrom="1.0" 
 android:valueTo="0.0"/> 
 <!--旋转--> 
 <objectAnimator 
 android:duration="@integer/anim_length" 
 android:propertyName="rotationY" 
 android:valueFrom="-180" 
 android:valueTo="0"/> 
 <!--出现--> 
 <objectAnimator 
 android:duration="0" 
 android:propertyName="alpha" 
 android:startOffset="@integer/anim_half_length" 
 android:valueFrom="0.0" 
 android:valueTo="1.0"/> 
</set> 

anim_right_out.xml


<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android"> 
 <!--旋转--> 
 <objectAnimator 
 android:duration="@integer/anim_length" 
 android:propertyName="rotationY" 
 android:valueFrom="0" 
 android:valueTo="180"/> 
 <!--消失--> 
 <objectAnimator 
 android:duration="0" 
 android:propertyName="alpha" 
 android:startOffset="@integer/anim_half_length" 
 android:valueFrom="1.0" 
 android:valueTo="0.0"/> 
</set> 

用到了属性动画,为了兼容性,别忘了如下配置:

效果图如下:

效果图:

您可能感兴趣的文章:Android自定义ViewPager实现纵向滑动翻页效果Android CardView+ViewPager实现ViewPager翻页动画的方法Android ViewPager实现左右滑动翻页效果android ViewPager实现滑动翻页效果实例代码Android ViewPager实现图片轮翻效果Android原生ViewPager控件实现卡片翻动效果


--结束END--

本文标题: Android实现卡片翻转动画

本文链接: https://lsjlt.com/news/22586.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Android实现卡片翻转动画
    最近项目上用到了卡片的翻转效果,大致研究了下,也参考了网上的一些Demo,简单实现如下: activity_main.xml <?xml version=...
    99+
    2022-06-06
    动画 Android
  • Android如何实现翻转动画效果(卡片翻转)
    目录前言需求一、先介绍三个插值器二、实现步骤1.效果图2.布局3.逻辑判断(是否隐藏)4.翻转动画5.bug出现6.bug解决三、源码四、总结前言 最近好友问计蒙翻转动画,恰好在大...
    99+
    2024-04-02
  • android实现扑克卡片翻转
    今天看见一个Android 扑克卡片翻转效果的帖子,于是手痒想学一学,由于接触过的Animation动画等比较少,所以感觉很新奇。 首先,说一下布局,是FrameLayout,...
    99+
    2022-06-07
    Android
  • Android图片翻转动画简易实现代码
    下面给大家分享一个有趣的动画:这里比较适合一张图片的翻转,如果是多张图片,可以参考APIDemo里的例子,就是加个ArrayAdapter,还是简单的,也可以自己发挥修改,实现...
    99+
    2022-06-06
    动画 Android
  • Android实现Flip翻转动画效果
    本文实例讲述了Android实现Flip翻转动画效果的方法,分享给大家供大家学习借鉴。 具体实现代码如下: LinearLayout locationLL = (Linear...
    99+
    2022-06-06
    动画 Android
  • android如何实现扑克卡片翻转
    这篇文章主要介绍了android如何实现扑克卡片翻转的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇android如何实现扑克卡片翻转文章都会有所收获,下面我们一起来看看吧。还需额外注意一点:这是刚刚才发现的问题...
    99+
    2023-06-30
  • js实现带翻转动画图片时钟
    本文实例为大家分享了js实现带翻转动画图片时钟的具体代码,供大家参考,具体内容如下 首先上图,先看效果 1、需求 根据当前系统时间来更改这个时钟,更改时间时,数字向上翻动,转成下一...
    99+
    2024-04-02
  • Android实现文字翻转动画的效果
    本文实现了Android程序文字翻转动画的小程序,具体代码如下: 先上效果图如下: 要求: 沿Y轴正方向看,数值减1时动画逆时针旋转,数值加1时动画顺时针旋转。 实现...
    99+
    2022-06-06
    动画 Android
  • js怎么实现带翻转动画图片时钟
    这篇文章主要讲解了“js怎么实现带翻转动画图片时钟”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“js怎么实现带翻转动画图片时钟”吧!首先上图,先看效果1、需求根据当前系统时间来更改这个时钟,...
    99+
    2023-06-30
  • 在Flutter中制作翻转卡片动画的完整实例代码
    目录前言使用自写代码预览完整代码使用第三个插件编码结论前言 本文将带您了解在 Flutter 中制作翻转卡片动画的两个完整示例。第一个示例从头开始实现,第二个示例使用第三方包。闲话少...
    99+
    2024-04-02
  • vue实现卡片翻转轮播展示
    vue卡片翻转轮播展示,同时在翻转时切换数据,供大家参考,具体内容如下 效果及代码 代码: <template> <div class="list-con...
    99+
    2024-04-02
  • css3如何实现卡片翻转效果
    本文小编为大家详细介绍“css3如何实现卡片翻转效果”,内容详细,步骤清晰,细节处理妥当,希望这篇“css3如何实现卡片翻转效果”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。 ...
    99+
    2024-04-02
  • Android动画之3D翻转效果实现函数分析
    Android中的翻转动画效果的实现,首先看一下运行效果如上图所示. Android中并没有提供直接做3D翻转的动画,所以关于3D翻转的动画效果需要我们自己实现,那么我们首先来...
    99+
    2022-06-06
    函数 3d Android
  • CSS如何实现卡片3D翻转效果
    这篇文章将为大家详细讲解有关CSS如何实现卡片3D翻转效果,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。效果:代码:html:<div class="main">...
    99+
    2023-06-08
  • Android实现旋转动画
    本文实例为大家分享了Android实现旋转动画的具体代码,供大家参考,具体内容如下 旋转动画(可加速、减速) 1、准备工作 首先需要有一个用于旋转的图片 需要考虑如何开始、结束、加速...
    99+
    2024-04-02
  • css怎样实现卡片图像翻转效果
    本篇文章为大家展示了css怎样实现卡片图像翻转效果,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。css翻转图片具体代码示例:   HTML代码部分<divc...
    99+
    2024-04-02
  • Android 实现卡片堆叠钱包管理动画效果
    目录实现原理:思路:重写adView 方法确保每个子View的测量属性宽度填满父组件重写onLayout 方法是关键源码先上效果图 源码 github.com/woshiwzy/C...
    99+
    2024-04-02
  • vue实现翻牌动画
    本文实例为大家分享了vue实现翻牌动画的具体代码,供大家参考,具体内容如下 应用场景 常用于大屏订单数量展示 原理 利用css writing-mode: vertical-rl ...
    99+
    2024-04-02
  • Android实现ViewFlipper图片动画滑动
    今天给大家实现的功能是类似于ViewFlipper的图片滑动的效果,供大家参考,具体内容如下 现在就直接上代码吧! 代码实例: 1、xml布局文件 <xml version="...
    99+
    2024-04-02
  • 使用CSS实现卡片翻转效果的技巧
    使用CSS实现卡片翻转效果的技巧CSS是前端开发中最常用的技术之一,它不仅可以美化页面,还可以实现一些炫酷的特效。其中,卡片翻转效果是一种非常常见且具有吸引力的效果。本文将介绍如何使用CSS来实现卡片翻转效果,并提供具体的代码示例。基本结构...
    99+
    2023-11-21
    CSS卡片翻转效果
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作