您好,登錄后才能下訂單哦!
這篇文章主要介紹了android如何實現撲克卡片翻轉的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇android如何實現撲克卡片翻轉文章都會有所收獲,下面我們一起來看看吧。
還需額外注意一點:這是剛剛才發現的問題,在主activity中,正反面那個xml文件放在后面就會優先默認顯示那個xml文件,所以,如果我需要一打開app就看到正面的話,那么正面xml文件需要放到反面xml文件的下面,就是
<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:onClick="flipCard" android:id="@+id/main_fl_container" tools:context="com.example.chenxuanhe.poketest.MainActivity"> <include layout="@layout/cell_card_back" /> <include layout="@layout/cell_card_front" /> </FrameLayout>
根據代碼的邏輯線走,則是接下來的兩個layout:
這兩個FrameLayout也是需要寫id的,之后會用到。
cell_card_back.xml:
<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/main_fl_card_back" > <ImageView android:src="@drawable/rectangle_back" android:contentDescription="@null" android:padding="16dp" android:layout_width="match_parent" android:layout_height="match_parent" /> <TextView android:textColor="@color/colorAccent" android:text="反面" android:textSize="40dp" android:layout_gravity="center" android:gravity="center" android:layout_width="match_parent" android:layout_height="match_parent" /> </FrameLayout>
cell_card_front.xml:
<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/main_fl_card_front"> <ImageView android:src="@drawable/rectangle_front" android:padding="16dp" android:contentDescription="@null" android:layout_width="match_parent" android:layout_height="match_parent" /> <TextView android:textSize="40dp" android:textColor="@color/colorPrimary" android:text="正面" android:gravity="center" android:layout_gravity="center" android:layout_width="match_parent" android:layout_height="match_parent" /> </FrameLayout>
繼續順著上面兩個布局的邏輯線來走,就需要用到兩個Drawable的文件作為背景圖,所以接著看drawable文件:
rectangle_back.xml:
大概是一個黑邊紅底色帶圓角的卡片界面
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <corners android:radius="16dp"/> <solid android:color="@color/cardBack"/> <stroke android:width="2dp" android:color="@android:color/black"/> </shape>
rectangle_front.xml:
大概是一個黑邊灰底色帶圓角的卡片界面
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <corners android:radius="16dp"/> <solid android:color="@color/cardFront"/> <stroke android:width="2dp" android:color="@android:color/black"/> </shape>
走完界面UI的邏輯線之后,就去看Java代碼,發現需要兩個Animator,于是在res文件下創建一個animator資源文件夾,在下創建兩個動畫文件:
anim-in.xml:
這是一個從左邊進入的動畫,一開始是隱藏的,逆向旋轉,當旋轉到一半時,顯示卡片
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <!--消失--> <objectAnimator android:duration="0" android:propertyName="alpha" android:valueFrom="1.0" android:valueTo="0.0"/> <!--旋轉--> <objectAnimator android:duration="3000" android:propertyName="rotationY" android:valueFrom="-180" android:valueTo="0"/> <!--出現--> <objectAnimator android:duration="0" android:propertyName="alpha" android:startOffset="1500" android:valueFrom="0.0" android:valueTo="1.0"/> </set>
anim_out.xml:
這是一個右邊出去的動畫,旋轉180度,旋轉到一半時,卡片就消失了。
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <objectAnimator android:duration="3000" android:propertyName="rotationY" android:valueFrom="0" android:valueTo="180"/> <!--消失--> <objectAnimator android:duration="0" android:propertyName="alpha" android:startOffset="1500" android:valueFrom="1.0" android:valueTo="0.0"/> </set>
接著看Java代碼:
MainActivity:
public class MainActivity extends AppCompatActivity { @Bind(R.id.main_fl_card_back) FrameLayout mFlCardBack; @Bind(R.id.main_fl_card_front) FrameLayout mFlCardFront; @Bind(R.id.main_fl_container) FrameLayout mFlContainer; private AnimatorSet mLeftInSet; private AnimatorSet mRightOutSet; private boolean mIsShowBack; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.bind(this); setAnimation();//設置動畫 setCameraDistance();//設置鏡頭距離,在這里不是太懂 } private void setAnimation() { //mLeftInSet是左邊進入的動畫 mLeftInSet = (AnimatorSet) AnimatorInflater.loadAnimator(this, R.animator.anim_in); //mRightOutSet是右邊出去的動畫 mRightOutSet = (AnimatorSet) AnimatorInflater.loadAnimator(this, R.animator.anim_out); //點擊事件 //通過ListenerAdapter就不需重寫所有方法,只需寫需要寫的方法 mRightOutSet.addListener(new AnimatorListenerAdapter() { //動畫開始時候 @Override public void onAnimationStart(Animator animation) { super.onAnimationStart(animation); mFlContainer.setClickable(false); } }); //動畫結束的時候 mLeftInSet.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { super.onAnimationEnd(animation); mFlContainer.setClickable(true);//主布局中framelayouy的就允許你去點擊了 } }); } //一直不是很懂的設置鏡頭距離, //帖子上的注釋寫著:改變視角距離,貼近屏幕 private void setCameraDistance() { int distance = 16000; float scale = getResources().getDisplayMetrics().density*distance; mFlCardFront.setCameraDistance(scale);//設置距離 mFlCardBack.setCameraDistance(scale);//設置距離 } //這是主Framelayout的點擊方法 public void flipCard(View view){ //mIsShowBack可以理解為互斥,所以為boolean if(!mIsShowBack){ //右出動畫設置在正面卡片界面 mRightOutSet.setTarget(mFlCardFront); //左入動畫設置在反面卡片界面 mLeftInSet.setTarget(mFlCardBack); //開始動畫 mRightOutSet.start(); mLeftInSet.start(); mIsShowBack = true; }else { //右出動畫設置在卡片背面界面 mRightOutSet.setTarget(mFlCardBack); //左入動畫設置在卡片正面界面 mLeftInSet.setTarget(mFlCardFront); mRightOutSet.start(); mLeftInSet.start(); mIsShowBack = false; } } //這一點我一直沒想到,還可以在onDestroy方法中解綁ButterKnife protected void onDestroy(){ super.onDestroy(); ButterKnife.unbind(this); } }
關于“android如何實現撲克卡片翻轉”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“android如何實現撲克卡片翻轉”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。