android学习(十八) 添加动画(三) 显示卡片翻转动画
来源:互联网 发布:linux 终端 重启 编辑:程序博客网 时间:2024/06/14 12:39
完成以下文件:
· src/CardFlipActivity.java
· animator/card_flip_right_in.xml
· animator/card_flip_right_out.xml
· animator/card_flip_left_in.xml
· animator/card_flip_left_out.xml
· layout/fragment_card_back.xml
· menu/menu.xml
创建动画
创建卡片翻转动画。
card_flip_left_in.xml
<set xmlns:android="http://schemas.android.com/apk/res/android"> <!--再翻转之前设置alpha为0是必要的--> <objectAnimator android:valueFrom="1.0" android:valueTo="0.0" android:propertyName="alpha" android:duration="0" /> <!--翻转 --> <objectAnimator android:valueFrom="180" android:valueTo="0" //动画类型(以Y轴翻转) android:propertyName="rotationY" //变化速度 android:interpolator="@android:interpolator/accelerate_decelerate" //动画时长(毫秒) android:duration="@integer/card_flip_time_full" /> <objectAnimator android:valueFrom="0.0" android:valueTo="1.0" android:propertyName="alpha" android:startOffset="@integer/card_flip_time_half" android:duration="1" /></set>
card_flip_left_out.xml
<set xmlns:android="http://schemas.android.com/apk/res/android"> <!--翻转--> <objectAnimator android:valueFrom="0" android:valueTo="-180" android:propertyName="rotationY" android:interpolator="@android:interpolator/accelerate_decelerate" android:duration="@integer/card_flip_time_full" /> <objectAnimator android:valueFrom="1.0" android:valueTo="0.0" android:propertyName="alpha" android:startOffset="@integer/card_flip_time_half" android:duration="1" /></set>
card_flip_right_in.xml
<set xmlns:android="http://schemas.android.com/apk/res/android"> <objectAnimator android:valueFrom="1.0" android:valueTo="0.0" android:propertyName="alpha" android:duration="0" /> <objectAnimator android:valueFrom="180" android:valueTo="0" android:propertyName="rotationY" android:interpolator="@android:interpolator/accelerate_decelerate" android:duration="@integer/card_flip_time_full" /> <objectAnimator android:valueFrom="0.0" android:valueTo="1.0" android:propertyName="alpha" android:startOffset="@integer/card_flip_time_half" android:duration="1" /></set>
card_flip_right_out.xml
<set xmlns:android="http://schemas.android.com/apk/res/android"> <objectAnimator android:valueFrom="0" android:valueTo="-180" android:propertyName="rotationY" android:interpolator="@android:interpolator/accelerate_decelerate" android:duration="@integer/card_flip_time_full" /> <objectAnimator android:valueFrom="1.0" android:valueTo="0.0" android:propertyName="alpha" android:startOffset="@integer/card_flip_time_half" android:duration="1" /></set>
创建视图
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:background="#a6c" android:padding="16dp" android:gravity="bottom"> <TextView android:id="@android:id/text1" style="?android:textAppearanceLarge" android:textStyle="bold" android:textColor="#fff" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/card_back_title" /> <TextView style="?android:textAppearanceSmall" android:textAllCaps="true" android:textColor="#80ffffff" android:textStyle="bold" android:lineSpacingMultiplier="1.2" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/card_back_description" /></LinearLayout>
另一个卡片
<ImageView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:src="@drawable/image1" android:scaleType="centerCrop" android:contentDescription="@string/description_image_1" />
创建Fragment
//正面的卡片 public class CardFrontFragment extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment_card_front, container, false); } } //反面的卡片 public class CardBackFragment extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment_card_back, container, false); } }
注意:继承的不是v4的Fragment
动画卡片翻转
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/container" android:layout_width="match_parent" android:layout_height="match_parent" />
在activity代码里设置显示Fragment为CardFrontFragment
public class CardFlipActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_activity_card_flip); if (savedInstanceState == null) { getFragmentManager() .beginTransaction() .add(R.id.container, new CardFrontFragment()) .commit(); } } ...}
· 设置为碎片转换所创建的自定义动画。
· 替换当前显示的一个新的片段,进行你创建的自定义动画。
· 将先前显示的片段添加到碎片后堆栈中,这样当用户按下后退按钮时,卡片就会翻转过来。
具体代码。
private void flipCard() { if (mShowingBack) { getFragmentManager().popBackStack(); return; } //向后翻转 mShowingBack = true; //创建并提交一个新的片段事务,将该片段添加到该卡的后面, // 使用自定义动画,并作为片段管理器的后台堆栈的一部 //不检验资源类型 getFragmentManager() .beginTransaction() .setCustomAnimations(R.animator.card_flip_right_in, R.animator.card_flip_right_out, R.animator.card_flip_left_in, R.animator.card_flip_left_out) .replace(R.id.container, new CardBackFragment()) //将此transaction添加到后台堆栈,允许用户按回到前面的卡片。 .addToBackStack(null) .commit(); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.activity_crossfade,menu); return super.onCreateOptionsMenu(menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()){ case R.id.activity_crossfade: flipCard(); break; } return super.onOptionsItemSelected(item); }
摘自android developer
0 0
- android学习(十八) 添加动画(三) 显示卡片翻转动画
- Android---显示卡片翻转的动画效果
- Android实现卡片翻转动画
- Android 卡片翻转动画效果
- Android官网培训课:显示卡片翻转动画
- Android Animations(三):卡片翻转动画(Card Flip)
- 自定义卡片翻转动画
- Displaying Card Flip Animations 显示卡片翻转动画
- android学习(十八) 添加动画(一)淡入淡出的视图
- android学习(十八) 添加动画(四) 缩放视图
- android实现卡片动画
- 实现卡片翻转的动画效果
- 实现翻转卡片的动画效果
- 卡片翻转,动画闪烁问题修复
- CSS 3D翻转卡片动画
- Android 图片翻转动画
- Android 图片翻转动画
- android学习(十八) 添加动画(二) 使用ViewPager的屏幕幻灯片
- Spring Cloud 负载均衡后,某个服务挂掉后保证数据一致性
- POJ 3449 Geometric Shapes(判断几个不同图形的相交)
- 文件系统不一致导致找不到文件
- SpringBoot学习笔记(三) SpringBoot 自动配置原理
- 查询数据库客户信息显示在页面并进行相关操作
- android学习(十八) 添加动画(三) 显示卡片翻转动画
- 1019. General Palindromic Number (20)
- 前端动画渲染引擎pixi.js系列(3)container和Sprite继承外专有的函数与方法
- 数据结构(线性表):双循环链表
- yii中缓存(cache)详解
- Editext
- Once框架使用
- fileoutputstream 抛文件找不到异常
- 【recursive autoencoder】运行str2vec