文章目錄
- 前言
- 需求
- 一、先介紹三個插值器
- 二、實作步驟
- 1.效果圖
- 2.布局
- 3.邏輯判斷(是否隱藏)
- 4.翻轉影片
- 5.bug出現
- 6.bug解決
- 三、原始碼
- MainActivity.java
- activity_main.xml
- 四、總結
前言
最近好友問計蒙翻轉影片,恰好在大二那年看Android Api Demo時記了筆記,由此寫一篇文章,
需求
螢屏右滑事件觸發卡片的翻轉效果 ,為了方便,在例子中將右滑事件改成按鈕點擊事件
老規矩,最后有原始碼
一、先介紹三個插值器
LinearInterpolator() 其變化速率恒定
AccelerateInterpolator() 其變化開始速率較慢,后面加速
DecelerateInterpolator() 其變化開始速率較快,后面減速
二、實作步驟
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.翻轉影片
//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方向角度
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="點擊翻轉"/>
</RelativeLayout>
四、總結
最后將button的點擊事件改成螢屏監聽事件即可,
希望對您有所幫助,歡迎留言,如有問題可聯系計蒙,
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/245245.html
標籤:其他
上一篇:彈性盒子進階2-對齊方式
下一篇:Android 微信登陸
