Android如何實現(xiàn)翻轉(zhuǎn)動畫效果(卡片翻轉(zhuǎn))
前言
最近好友問計蒙翻轉(zhuǎn)動畫,恰好在大二那年看Android Api Demo時記了筆記,由此寫一篇文章。
需求
屏幕右滑事件觸發(fā)卡片的翻轉(zhuǎn)效果 ,為了方便,在例子中將右滑事件改成按鈕點擊事件
老規(guī)矩,最后有源碼
一、先介紹三個插值器
- LinearInterpolator() 其變化速率恒定
- AccelerateInterpolator() 其變化開始速率較慢,后面加速
- DecelerateInterpolator() 其變化開始速率較快,后面減速
二、實現(xiàn)步驟
1.效果圖
2.布局
一個按鈕,兩個TextView(布局文件在源碼部分)
3.邏輯判斷(是否隱藏)
final TextView visibletext; final TextView invisibletext; //邏輯判斷 if (textview1.getVisibility() == View.GONE) { visibletext = textview2; invisibletext = textview1; } else { invisibletext = textview2; visibletext = textview1; }
4.翻轉(zhuǎn)動畫
//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出現(xiàn)
發(fā)現(xiàn)實現(xiàn)后,第一次點擊出現(xiàn)bug
6.bug解決
在找到控件后,默認(rèn)設(shè)置y方向角度
textview2.setRotationY(-90f);
三、源碼
MainActivity.java
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
<?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="點擊翻轉(zhuǎn)"/> </RelativeLayout>
四、總結(jié)
最后將button的點擊事件改成屏幕監(jiān)聽事件即可。
到此這篇關(guān)于Android如何實現(xiàn)翻轉(zhuǎn)動畫效果的文章就介紹到這了,更多相關(guān)Android實現(xiàn)翻轉(zhuǎn)動畫內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Android判斷軟鍵盤的狀態(tài)和隱藏軟鍵盤的簡單實例
下面小編就為大家?guī)硪黄狝ndroid判斷軟鍵盤的狀態(tài)和隱藏軟鍵盤的簡單實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-10-10Apache?Cordova?Android原理應(yīng)用實例詳解
這篇文章主要為大家介紹了Apache?Cordova?Android原理應(yīng)用實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-11-11Android上傳多張圖片的實例代碼(RxJava異步分發(fā))
本篇文章主要介紹了Android上傳多張圖片的實例代碼(RxJava異步分發(fā)),具有一定的參考價值,有興趣的可以了解一下2017-08-08Android Jetpack庫剖析之Lifecycle組件篇
本章也是帶來了Jetpack中我認(rèn)為最重要的架構(gòu)組件Lifecycle的原理探索,至于為什么覺得它是最重要是因為像ViewModel,LiveData這些組件也依賴于Lifecycle來感知宿主的生命周期,那么本章我們帶著幾個問題來探索一下這個組件2022-07-07Android應(yīng)用開發(fā)中觸摸屏手勢識別的實現(xiàn)方法解析
這篇文章主要介紹了Android應(yīng)用開發(fā)中觸摸屏手勢識別的實現(xiàn)方法解析,深入的部分則是對左右手勢的識別給出了相關(guān)編寫思路,需要的朋友可以參考下2016-02-02使用AccessibilityService實現(xiàn)微信自動切換賬號功能
這篇文章主要為大家詳細(xì)介紹了使用AccessibilityService實現(xiàn)微信自動切換賬號功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-12-12