使用Jetpack Compose实现翻转卡片效果流程详解

作者:Calvin880828 时间:2022-01-24 16:26:55 

如何使用 Jetpack Compose 创建翻转卡片效果

使用Jetpack Compose实现翻转卡片效果流程详解

介绍

在电子商务和银行应用程序中输入卡信息是很常见的情况。我认为让用户更轻松地处理这种情况并创建更吸引眼球的 UI 将很有用。大多数应用程序/网站都喜欢它。

执行

在开发阶段,您需要做的是打开一个 Android 项目并实施 Compose 库。

如果我们继续编码,我们可以检查以下 Compose 代码。

使用Jetpack Compose实现翻转卡片效果流程详解

您可以根据上面的设计在屏幕上创建您的卡片。

@Composable
fun AddCreditCard(backgroundColor: Color) {
   var rotated by remember { mutableStateOf(false) }
   val cardType =
       when (result.value?.organization) {
           "MasterCard" -> painterResource(R.drawable.mc)
           "VISA" -> painterResource(R.drawable.visa)
           else -> painterResource(R.drawable.ic_launcher_background)
       }
   val rotation by animateFloatAsState(
       targetValue = if (rotated) 180f else 0f,
       animationSpec = tween(500)
   )
   val animateFront by animateFloatAsState(
       targetValue = if (!rotated) 1f else 0f,
       animationSpec = tween(500)
   )
   val animateBack by animateFloatAsState(
       targetValue = if (rotated) 1f else 0f,
       animationSpec = tween(500)
   )
   Card(
       modifier = Modifier
           .height(220.dp)
           .fillMaxWidth()
           .padding(10.dp)
           .graphicsLayer {
               rotationY = rotation
               cameraDistance = 8 * density
           }
           .clickable {
               rotated = !rotated
           },
       shape = RoundedCornerShape(14.dp),
       elevation = 4.dp,
       backgroundColor = backgroundColor,
       contentColor = Color.White
   ) {
       if (!rotated) {
           Column(
               horizontalAlignment = Alignment.Start,
               verticalArrangement = Arrangement.SpaceBetween,
               modifier = Modifier.padding(start = 8.dp, end = 8.dp, bottom = 8.dp),
           ) {
               Row(horizontalArrangement = Arrangement.SpaceBetween) {
                   Icon(
                       painter = painterResource(R.drawable.ic_contactless),
                       contentDescription = "test",
                       modifier = Modifier
                           .width(50.dp)
                           .height(50.dp)
                           .padding(top = 6.dp, bottom = 6.dp, end = 20.dp)
                           .graphicsLayer {
                               alpha = animateFront
                           },
                       tint = Color.White
                   )
                   Spacer(modifier = Modifier.weight(1f))
                   Image(
                       painter = cardType,
                       contentDescription = "test",
                       modifier = Modifier
                           .width(50.dp)
                           .height(50.dp)
                           .graphicsLayer {
                               alpha = animateFront
                           }
                   )
               }
               result.value?.number?.let {
                   Text(
                       text = it,
                       modifier = Modifier
                           .padding(top = 16.dp)
                           .graphicsLayer {
                               alpha = animateFront
                           },
                       fontFamily = fontName,
                       fontWeight = FontWeight.Normal,
                       fontSize = 25.sp
                   )
               }
               Row(horizontalArrangement = Arrangement.SpaceBetween) {
                   Column(horizontalAlignment = Alignment.Start) {
                       Text(
                           text = "Card Holder",
                           color = Color.Gray,
                           fontSize = 9.sp,
                           fontWeight = FontWeight.Bold,
                           modifier = Modifier
                               .graphicsLayer {
                                   alpha = animateFront
                               }
                       )
                       Text(
                           text = "Mehmet Yozgatli",
                           color = Color.White,
                           fontSize = 15.sp,
                           fontWeight = FontWeight.Bold,
                           modifier = Modifier
                               .graphicsLayer {
                                   alpha = animateFront
                               }
                       )
                   }
                   Spacer(modifier = Modifier.weight(1f))
                   Column(horizontalAlignment = Alignment.Start) {
                       Text(
                           text = "VALID THRU",
                           color = Color.Gray,
                           fontSize = 9.sp,
                           fontWeight = FontWeight.Bold,
                           modifier = Modifier
                               .graphicsLayer {
                                   alpha = animateFront
                               }
                       )
                       result.value?.expire?.let {
                           Text(
                               text = it,
                               color = Color.White,
                               fontSize = 15.sp,
                               fontWeight = FontWeight.Bold,
                               modifier = Modifier
                                   .graphicsLayer {
                                       alpha = animateFront
                                   }
                           )
                       }
                   }
               }
           }
       } else {
           Column(
               modifier = Modifier.padding(top = 20.dp),
           ) {
               Divider(
                   modifier = Modifier
                       .graphicsLayer {
                           alpha = animateBack
                       }, color = Color.Black, thickness = 50.dp
               )
               Text(
                   text = "123",
                   color = Color.Black,
                   modifier = Modifier
                       .padding(10.dp)
                       .background(Color.White)
                       .fillMaxWidth()
                       .graphicsLayer {
                           alpha = animateBack
                           rotationY = rotation
                       }
                       .padding(10.dp),
                   fontSize = 15.sp,
                   textAlign = TextAlign.End
               )
               Text(
                   text = "Developed by Mehmet Yozgatli",
                   color = Color.White,
                   modifier = Modifier
                       .fillMaxWidth()
                       .graphicsLayer {
                           alpha = animateBack
                           rotationY = rotation
                       }
                       .padding(5.dp),
                   fontFamily = fontName,
                   fontWeight = FontWeight.Thin,
                   fontSize = 10.sp,
                   textAlign = TextAlign.Center
               )
           }
       }
   }
}

创建卡片后,将旋转、animateFront 和 animateBack 值作为参数传递给组件时,就完成了动画部分。

ML Kit银行卡识别

通过使用华为机器学习服务的银行卡识别服务,您可以为用户提供极大的便利。

您可以按照官方文档中的实施步骤进行操作。

https://developer.huawei.com/consumer/en/doc/development/hiai-Guides/dev-process-0000001050038076

输出

卡片翻转效果

使用Jetpack Compose实现翻转卡片效果流程详解

使用机器学习套件获取信息

使用Jetpack Compose实现翻转卡片效果流程详解

结论

重要的是我们的应用程序要易于使用并让事情变得简单。

来源:https://blog.csdn.net/u011897062/article/details/130066618

标签:Jetpack,Compose,翻转,卡片
0
投稿

猜你喜欢

  • servlet3文件上传操作

    2023-02-05 18:27:44
  • Unity实现攻击范围检测并绘制检测区域

    2023-09-18 21:59:10
  • 详解Java中的日期类

    2022-08-27 17:14:03
  • C# Cache缓存读取的设置方法

    2022-11-18 05:33:53
  • 一篇文章弄懂Java8中的时间处理

    2022-07-22 07:56:32
  • C#中的尾递归与Continuation详解

    2021-12-05 16:35:15
  • 文件路径正确,报java.io.FileNotFoundException异常的原因及解决办法

    2022-01-28 04:52:57
  • Java花式解决'分割回文串 ii'问题详解

    2022-07-09 02:01:58
  • Java基本数据类型与类型转换实例分析

    2021-07-13 14:41:29
  • springBoot集成Elasticsearch 报错 Health check failed的解决

    2022-12-07 05:18:16
  • SpringSecurity权限控制实现原理解析

    2022-04-05 14:46:27
  • eclipse的git插件安装、配置与使用详解

    2021-07-23 10:04:47
  • 将本地jar包安装进入maven仓库(实现方法)

    2022-06-18 00:35:54
  • Android下的CMD命令之关机重启及重启recovery

    2023-06-20 23:08:21
  • Android点击事件之多点触摸与手势识别的实现

    2022-10-12 05:12:28
  • Android实现退出界面弹出提示对话框

    2023-03-09 12:19:44
  • Java多线程编程综合案例详解

    2023-12-09 18:13:25
  • IDEA教程创建SpringBoot前后端分离项目示例图解

    2022-06-30 02:41:10
  • Java线程休眠的5种方法

    2022-02-21 04:49:48
  • java9开始——接口中可以定义private私有方法

    2023-03-27 06:53:15
  • asp之家 软件编程 m.aspxhome.com