Android 登录3D翻转动画效果

描述:这是一个 登录3D翻转效果的Demo。

项目代码在最后面!!!!跳转到最后

控件效果如下:

实现功能:

  • 使页面进行3D翻转(3D翻转效果)
  • 可通过回调监听两个页面的显隐

设计核心:

主要的设计核心是依赖于Camera来进行视觉上深度的放大和缩小,而旋转则是依靠动画进行实现。

核心代码:

Rotate3dAnimation.java 一个3D的旋转动画效果,也是旋转动画的核心

import android.graphics.Camera;
import android.graphics.Matrix;
import android.view.animation.Animation;
import android.view.animation.Transformation;public class Rotate3dAnimation extends Animation{private float mCenterX,mCenterY;private Camera mCamera;private RotateListener rotateListener;private boolean isBack=false;private boolean ishalf=false;private float mDegree=180;public Rotate3dAnimation(){}public void setRotateListener(RotateListener rotateListener){this.rotateListener=rotateListener;}//翻转监听public void setBack(boolean back) {isBack = back;}//初始化位置@Overridepublic void initialize(int width, int height, int parentWidth, int parentHeight) {super.initialize(width, height, parentWidth, parentHeight);mCamera=new Camera();mCenterX=(float) width/2;mCenterY=(float)height/2;}//动画改变//interpolatedTime  0~1@Overrideprotected void applyTransformation(float interpolatedTime, Transformation t) {if (interpolatedTime>0.5&&interpolatedTime<=1){if (!ishalf){rotateListener.transhalf(isBack);ishalf=true;}}else if (interpolatedTime<0.5){if (ishalf){ishalf=false;}}//是否已过一半float degrees = mDegree * interpolatedTime;if (isBack){degrees =180- degrees;}mCamera.save();;float z;//Z轴高度500 默认-576if (interpolatedTime<0.5){z= 500*interpolatedTime*2;}else {z= 1000 *(1-interpolatedTime);}mCamera.translate(0,0,z);final Matrix matrix=t.getMatrix();mCamera.rotateY(degrees);mCamera.getMatrix(matrix);mCamera.restore();matrix.preTranslate(-mCenterX,-mCenterY);matrix.postTranslate(mCenterX,mCenterY);super.applyTransformation(interpolatedTime, t);}public interface RotateListener{void transhalf(boolean isback);//移动到一半 适合显隐界面}
}

使用示例:

如效果图里的登录样例:
LoginActivity3d.java


import androidx.cardview.widget.CardView;import android.util.Log;
import android.view.View;
import android.view.animation.AccelerateDecelerateInterpolator;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.Toast;import com.alibaba.android.arouter.facade.annotation.Route;
import com.ui.design.R;
import com.ui.design.main.base.BaseActivity;
import com.ui.design.main.constants.Constants;
import com.ui.design.view.rotateLogin3d.view.Rotate3dAnimation;@Route(path = Constants.LoginActivity3d)
public class LoginActivity3d extends BaseActivity {private Rotate3dAnimation rotate3dAnimation;@Overrideprotected int initLayout() {return R.layout.activity_login_activity3d;}@Overrideprotected void initView() {Button register_bt=findViewById(R.id.register_bt);Button login=findViewById(R.id.login_bt);Button registerfinish_bt=findViewById(R.id.registerfinish_bt);Button backlogin_bt=findViewById(R.id.backlogin_bt);LinearLayout linearLayout1=findViewById(R.id.linear1);LinearLayout linearLayout2=findViewById(R.id.linear2);CardView cardView=findViewById(R.id.cardView);initAnimation();rotate3dAnimation.setRotateListener((isback) -> {Log.e("TEST","roate");if (isback){linearLayout1.setVisibility(View.VISIBLE);linearLayout2.setVisibility(View.GONE);}else {linearLayout1.setVisibility(View.GONE);linearLayout2.setVisibility(View.VISIBLE);}});register_bt.setOnClickListener(v -> {rotate3dAnimation.setBack(false);cardView.startAnimation(rotate3dAnimation);});login.setOnClickListener(v -> Toast.makeText(LoginActivity3d.this,"完成登录操作",Toast.LENGTH_SHORT).show());registerfinish_bt.setOnClickListener(v -> Toast.makeText(LoginActivity3d.this,"完成注册操作",Toast.LENGTH_SHORT).show());backlogin_bt.setOnClickListener(v -> {rotate3dAnimation.setBack(true);cardView.startAnimation(rotate3dAnimation);});}private void initAnimation(){rotate3dAnimation=new Rotate3dAnimation();rotate3dAnimation.setInterpolator(new AccelerateDecelerateInterpolator());rotate3dAnimation.setDuration(2000);rotate3dAnimation.setFillAfter(true);}@Overrideprotected void initData() {}
}

layout:activity_login_activity3d.xml
android:rotationY=“180” //非常关键 不然你的图是反的

   <?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".view.rotateLogin3d.LoginActivity3d"android:background="@drawable/jrtt_channel_bg_channel"><include layout="@layout/title_include" /><androidx.cardview.widget.CardViewandroid:id="@+id/cardView"android:layout_width="300dp"android:layout_height="400dp"android:background="@color/white"app:cardCornerRadius="5dp"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent"><LinearLayoutandroid:id="@+id/linear1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center"android:orientation="vertical"><androidx.appcompat.widget.AppCompatTextViewandroid:id="@+id/loginText"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center_horizontal"android:text="登陆页"android:textColor="@color/black"android:textSize="15sp" /><androidx.appcompat.widget.AppCompatEditTextandroid:layout_width="250dp"android:layout_height="40dp"android:inputType="text"android:layout_marginTop="20dp"android:paddingStart="20dp"android:paddingEnd="20dp"android:background="@drawable/ic_radius_15dp_black_stroke"android:textColor="@color/black"android:hint="用户名"android:textSize="12sp" /><androidx.appcompat.widget.AppCompatEditTextandroid:layout_width="250dp"android:layout_height="40dp"android:inputType="text"android:layout_marginTop="10dp"android:paddingStart="20dp"android:paddingEnd="20dp"android:background="@drawable/ic_radius_15dp_black_stroke"android:textColor="@color/black"android:hint="密码"android:textSize="12sp" /><com.google.android.material.textfield.TextInputLayoutandroid:id="@+id/password_confim"android:visibility="gone"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="5dp"android:hint="密码确认"app:counterEnabled="true"app:counterTextColor="@color/brown"app:hintTextColor="@color/brown"><androidx.appcompat.widget.AppCompatEditTextandroid:layout_width="250dp"android:layout_height="wrap_content"android:background="@color/white"android:inputType="textPassword"android:textColorHint="@color/brown"android:textSize="12sp" /></com.google.android.material.textfield.TextInputLayout><com.google.android.material.button.MaterialButtonandroid:id="@+id/login_bt"android:layout_width="match_parent"android:layout_height="40dp"android:layout_marginTop="25dp"android:backgroundTint="@color/brown"android:text="登录"android:textColor="@color/white"app:cornerRadius="10dp"app:rippleColor="@color/bisque" /><com.google.android.material.button.MaterialButtonandroid:id="@+id/register_bt"android:layout_width="match_parent"android:layout_height="40dp"android:layout_marginTop="5dp"android:backgroundTint="@color/lightgrey"android:text="去注册"android:textColor="@color/black"app:cornerRadius="10dp" /></LinearLayout><LinearLayoutandroid:id="@+id/linear2"android:layout_width="wrap_content"android:visibility="gone"android:rotationY="180"android:layout_height="wrap_content"android:layout_gravity="center"android:orientation="vertical"><androidx.appcompat.widget.AppCompatTextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center_horizontal"android:text="注册页"android:textColor="@color/black"android:textSize="15sp" /><androidx.appcompat.widget.AppCompatEditTextandroid:layout_width="250dp"android:layout_height="40dp"android:inputType="text"android:layout_marginTop="20dp"android:paddingStart="20dp"android:paddingEnd="20dp"android:background="@drawable/ic_radius_15dp_black_stroke"android:textColor="@color/black"android:hint="新用户名"android:textSize="12sp" /><androidx.appcompat.widget.AppCompatEditTextandroid:layout_width="250dp"android:layout_height="40dp"android:inputType="text"android:layout_marginTop="10dp"android:paddingStart="20dp"android:paddingEnd="20dp"android:background="@drawable/ic_radius_15dp_black_stroke"android:textColor="@color/black"android:hint="密码"android:textSize="12sp" /><androidx.appcompat.widget.AppCompatEditTextandroid:layout_width="250dp"android:layout_height="40dp"android:inputType="text"android:layout_marginTop="10dp"android:paddingStart="20dp"android:paddingEnd="20dp"android:background="@drawable/ic_radius_15dp_black_stroke"android:textColor="@color/black"android:hint="密码确认"android:textSize="12sp" /><com.google.android.material.button.MaterialButtonandroid:id="@+id/registerfinish_bt"android:layout_width="match_parent"android:layout_height="40dp"android:layout_marginTop="25dp"android:backgroundTint="@color/brown"android:text="完成注册"android:textColor="@color/white"app:cornerRadius="10dp" /><com.google.android.material.button.MaterialButtonandroid:id="@+id/backlogin_bt"android:layout_width="match_parent"android:layout_height="40dp"android:layout_marginTop="5dp"android:backgroundTint="@color/lightgrey"android:text="返回登录"android:textColor="@color/black"app:cornerRadius="10dp" /></LinearLayout></androidx.cardview.widget.CardView>
</androidx.constraintlayout.widget.ConstraintLayout>

项目代码仓库

如果直接复制可能会出现代码缺陷,完整代码请去仓库下载
如果觉得还行,耽误您几秒钟的时间去我的仓库点点star,万一以后用到了呢?

UIDesign 开源项目

Android 登录3D翻转动画效果相关推荐

  1. php 3d animation,CSS_纯CSS实现菜单、导航栏的3D翻转动画效果,我曾经向大家展示过闪光的logo - phpStudy...

    纯CSS实现菜单.导航栏的3D翻转动画效果 我曾经向大家展示过闪光的logo,燃烧的火狐狸,多重嵌套动画等例子,今天,我们将要制作一个简单但非常酷的3D翻转菜单.大家可以先看看实际效果,下面有效果截图 ...

  2. Android 卡片翻转动画效果

    转载请标明出处:http://blog.csdn.net/android_mnbvcxz/article/details/78570594 Android 卡片翻转动画效果 前言 前端时间开发一款应用 ...

  3. html5 鼠标旋转动画效果,CSS3鼠标滑过图片3D翻转动画特效

    这是一款效果非常炫酷的CSS3鼠标滑过图片3D翻转动画特效.该特效基于Bootstrap网格系统来布局,通过简单的CSS3代码,在鼠标滑过图片时对图片进行3D翻转,效果非常的酷. 使用方法 HTML结 ...

  4. android中设置Animation 动画效果

    在 Android 中, Animation 动画效果的实现可以通过两种方式进行实现,一种是 tweened animation 渐变动画,另一种是 frame by frame animation ...

  5. android仿ppt,android 仿ppt进入动画效果合集

    EnterAnimation android 仿ppt进入动画效果合集, 百叶窗效果,擦除效果,盒状效果,阶梯效果,菱形效果,轮子效果,劈裂效果,棋盘效果, 切入效果,扇形展开效果,十字扩展效果,随机 ...

  6. android 开红包动画,Android实现红包雨动画效果

    本文介绍了Android实现红包雨动画效果,分享给大家,希望对大家有帮助 红包雨 关于实现上面红包雨效果步骤如下: 1.创建一个红包实体类 public class RedPacket { publi ...

  7. Android利用SVG实现动画效果

    系列文章目录 Android利用SVG实现动画效果 老规矩,文中/文末会放置源码 文章目录 系列文章目录 前言 一.先看看Android中一个简单的SVG图 二.pathdata中参数的定义(三角形是 ...

  8. flash图片如何镜像翻转_在canvas上实现元素图片镜像翻转动画效果的方法

    这篇文章主要介绍了在canvas上实现元素图片镜像翻转动画效果的方法的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧! 一.Canvas图片水平镜像翻转效果预览 ...

  9. 纯CSS实现3D正方体动画效果

    目录 前言 正文 1.基本架构 2.书写每个div样式 3.为需要产生动画的一面单独设置样式 4.设置鼠标hover效果 5.优化 总结 前言 纯CSS实现3D正方体动画效果,此方法是通过transf ...

最新文章

  1. cpu序列号唯一吗_手机CPU天梯图2020年1月最新版 你的手机处理器排名高吗?
  2. JSP 基础之 JSTL c:forEach用法
  3. chime-4 lstm_CHIME-6挑战赛回顾
  4. mysql外键设置sql语句,SQL Server 2008之SQL语句外键
  5. 设计图书馆oracle触发器,Oracle触发器开发与设计
  6. AI持续赋能,搜狗S1会给录音笔行业带来哪些新变化?
  7. AxureRP8实战手册
  8. python快速入门神器 知乎_Python数据可视化神器--pyecharts 快速入门
  9. 用u盘装linux系统黑屏,u盘启动黑屏 u盘装系统启动不了黑屏咋办
  10. Entity Framework基础
  11. python培训班大概多少钱
  12. 背景差分法《python图像处理篇》
  13. 程序员开发指南!金三银四Android面试的一些感受,这原因我服了
  14. BaseAdapter的使用
  15. LeeCode 5454 前缀和 + 暴力
  16. 一个用 C 语言写的迷你版 2048 游戏,仅仅有 500个字符
  17. 发多少范德萨范德萨范德萨范德萨
  18. 如何将Word文件转化为Latex文件:word-to-latex-2.56详解
  19. 面试积累(简单的工厂模式)
  20. 【编译matlab函数生成dll】

热门文章

  1. html 地址 点击召唤高德,HTML5创建高德地图
  2. VR全景展示是什么,VR全景展示的功能有哪些?
  3. ROS机器人程序设计(原书第2版)补充资料 (零) 源代码、资料和印刷错误修订等 2017年02月22日更新
  4. 山西师范计算机科学与技术能转什么专业,太原师范学院可以转专业吗 太原师范学院新生转专业政策...
  5. Spring Boot基于KLock实现分布式锁的使用详解(一)
  6. usb gaghet hid 模拟鼠标键盘的绝对值描述
  7. 公司福利直接影响员工的身心健康
  8. 钢铁行业关键业务系统介绍
  9. Vue定制iview的表格头格式,通用版
  10. SAP FICO常用报表和事务码大全