我是靠谱客的博主 贤惠外套,这篇文章主要介绍Android如何实现翻转动画效果(卡片翻转),现在分享给大家,希望可以做个参考。

前言

最近好友问计蒙翻转动画,恰好在大二那年看Android Api Demo时记了笔记,由此写一篇文章。

需求

屏幕右滑事件触发卡片的翻转效果 ,为了方便,在例子中将右滑事件改成按钮点击事件

老规矩,最后有源码

一、先介绍三个插值器

  • LinearInterpolator()     其变化速率恒定
  • AccelerateInterpolator()    其变化开始速率较慢,后面加速
  • DecelerateInterpolator()   其变化开始速率较快,后面减速

二、实现步骤

1.效果图

2.布局

一个按钮,两个TextView(布局文件在源码部分)

3.逻辑判断(是否隐藏)

复制代码
1
2
3
4
5
6
7
8
9
10
final TextView visibletext; final TextView invisibletext; //逻辑判断 if (textview1.getVisibility() == View.GONE) { visibletext = textview2; invisibletext = textview1; } else { invisibletext = textview2; visibletext = textview1; }

4.翻转动画

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//LinearInterpolator() 其变化速率恒定 ObjectAnimator visToInvis = ObjectAnimator.ofFloat(visibletext, "rotationY", 0f, 90f); visToInvis.setDuration(500); //AccelerateInterpolator() 其变化开始速率较慢,后面加速 visToInvis.setInterpolator(new AccelerateInterpolator()); final ObjectAnimator invisToVis = ObjectAnimator.ofFloat(invisibletext, "rotationY", -90f, 0f); invisToVis.setDuration(500); //DecelerateInterpolator() 其变化开始速率较快,后面减速 invisToVis.setInterpolator(new DecelerateInterpolator()); visToInvis.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator anim) { visibletext.setVisibility(View.GONE); invisToVis.start(); invisibletext.setVisibility(View.VISIBLE); } }); visToInvis.start();

5.bug出现

发现实现后,第一次点击出现bug

6.bug解决

在找到控件后,默认设置y方向角度

复制代码
1
textview2.setRotationY(-90f);

三、源码

MainActivity.java

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
public class MainActivity extends Activity { private TextView textview1; private TextView textview2; private Button button; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); //bug解决 textview2.setRotationY(-90f); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { flipAnimation(); } }); } private void initView() { textview1 = (TextView) findViewById(R.id.textview1); textview2 = (TextView) findViewById(R.id.textview2); button = (Button) findViewById(R.id.button); } private void flipAnimation() { final TextView visibletext; final TextView invisibletext; //逻辑判断 if (textview1.getVisibility() == View.GONE) { visibletext = textview2; invisibletext = textview1; } else { invisibletext = textview2; visibletext = textview1; } //LinearInterpolator() 其变化速率恒定 ObjectAnimator visToInvis = ObjectAnimator.ofFloat(visibletext, "rotationY", 0f, 90f); visToInvis.setDuration(500); //AccelerateInterpolator() 其变化开始速率较慢,后面加速 visToInvis.setInterpolator(new AccelerateInterpolator()); final ObjectAnimator invisToVis = ObjectAnimator.ofFloat(invisibletext, "rotationY", -90f, 0f); invisToVis.setDuration(500); //DecelerateInterpolator() 其变化开始速率较快,后面减速 invisToVis.setInterpolator(new DecelerateInterpolator()); visToInvis.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator anim) { visibletext.setVisibility(View.GONE); invisToVis.start(); invisibletext.setVisibility(View.VISIBLE); } }); visToInvis.start(); } }

activity_main.xml

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns: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=".MainActivity"> <TextView android:layout_width="200dp" android:layout_height="200dp" android:background="#35B9F4" android:id="@+id/textview1" android:layout_centerInParent="true" /> <TextView android:layout_width="200dp" android:layout_height="200dp" android:background="#03DAC5" android:layout_centerInParent="true" android:id="@+id/textview2"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" android:id="@+id/button" android:text="点击翻转"/> </RelativeLayout>

四、总结

最后将button的点击事件改成屏幕监听事件即可。

到此这篇关于Android如何实现翻转动画效果的文章就介绍到这了,更多相关Android实现翻转动画内容请搜索靠谱客以前的文章或继续浏览下面的相关文章希望大家以后多多支持靠谱客!

最后

以上就是贤惠外套最近收集整理的关于Android如何实现翻转动画效果(卡片翻转)的全部内容,更多相关Android如何实现翻转动画效果(卡片翻转)内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(334)

评论列表共有 0 条评论

立即
投稿
返回
顶部