Android如何實(shí)現(xiàn)翻轉(zhuǎn)動(dòng)畫(huà)效果(卡片翻轉(zhuǎn))
最近好友問(wèn)計(jì)蒙翻轉(zhuǎn)動(dòng)畫(huà),恰好在大二那年看Android Api Demo時(shí)記了筆記,由此寫(xiě)一篇文章。
需求屏幕右滑事件觸發(fā)卡片的翻轉(zhuǎn)效果 ,為了方便,在例子中將右滑事件改成按鈕點(diǎn)擊事件
老規(guī)矩,最后有源碼
一、先介紹三個(gè)插值器 LinearInterpolator() 其變化速率恒定 AccelerateInterpolator() 其變化開(kāi)始速率較慢,后面加速 DecelerateInterpolator() 其變化開(kāi)始速率較快,后面減速 二、實(shí)現(xiàn)步驟1.效果圖一個(gè)按鈕,兩個(gè)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)動(dòng)畫(huà)
//LinearInterpolator() 其變化速率恒定ObjectAnimator visToInvis = ObjectAnimator.ofFloat(visibletext, 'rotationY', 0f, 90f);visToInvis.setDuration(500);//AccelerateInterpolator() 其變化開(kāi)始速率較慢,后面加速visToInvis.setInterpolator(new AccelerateInterpolator());final ObjectAnimator invisToVis = ObjectAnimator.ofFloat(invisibletext, 'rotationY',-90f, 0f);invisToVis.setDuration(500);//DecelerateInterpolator() 其變化開(kāi)始速率較快,后面減速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)實(shí)現(xiàn)后,第一次點(diǎn)擊出現(xiàn)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() 其變化開(kāi)始速率較慢,后面加速visToInvis.setInterpolator(new AccelerateInterpolator());final ObjectAnimator invisToVis = ObjectAnimator.ofFloat(invisibletext, 'rotationY',-90f, 0f);invisToVis.setDuration(500);//DecelerateInterpolator() 其變化開(kāi)始速率較快,后面減速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: android:layout_centerInParent='true' /><TextView android:layout_width='200dp' android:layout_height='200dp' android:background='#03DAC5' android:layout_centerInParent='true' android: /><Button android:layout_width='wrap_content' android:layout_height='wrap_content' android:layout_alignParentBottom='true' android:layout_centerHorizontal='true' android: android:text='點(diǎn)擊翻轉(zhuǎn)'/></RelativeLayout>四、總結(jié)
最后將button的點(diǎn)擊事件改成屏幕監(jiān)聽(tīng)事件即可。
到此這篇關(guān)于Android如何實(shí)現(xiàn)翻轉(zhuǎn)動(dòng)畫(huà)效果的文章就介紹到這了,更多相關(guān)Android實(shí)現(xiàn)翻轉(zhuǎn)動(dòng)畫(huà)內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!
相關(guān)文章:
1. ASP編碼必備的8條原則2. 使用css實(shí)現(xiàn)全兼容tooltip提示框3. 一文帶你搞懂JavaScript中的進(jìn)制與進(jìn)制轉(zhuǎn)換4. 匹配模式 - XSL教程 - 45. 詳解JS前端使用迭代器和生成器原理及示例6. 得到XML文檔大小的方法7. 詳解CSS偽元素的妙用單標(biāo)簽之美8. ASP基礎(chǔ)知識(shí)Command對(duì)象講解9. ASP刪除img標(biāo)簽的style屬性只保留src的正則函數(shù)10. 怎樣才能用js生成xmldom對(duì)象,并且在firefox中也實(shí)現(xiàn)xml數(shù)據(jù)島?
