ایجاد Android Card Flip Animation با استفاده از Gesture Event (بخش دوم)
جمعه 16 مهر 1395در این مقاله، می آموزیم که چگونه می توانیم با استفاده از gesture event ها ، در Xamarin ، یکAndroid card flip animation ایجاد کنیم. مراحل کار به صورت کامل توضیح داده شده اند.
مرحله 1 - ما در مقاله قبلی، یک پروژه و چند صفحه ایجاد کرده ایم. در این مقاله قصد داریم یک صفحه card backend و یک فایل animation XML ایجاد کنیم.
مرحله 2- صفحه ی Card_Back.axml را ایجاد کنید. به layout بروید. و مطابق زیر یک Android Layout اضافه کنید و نام آن را Card_back. axml بگذارید.

مرحله 3- به مسیر Solution Explorer-> Project Name-> Resources بروید و یک پوشه جدید ایجاد کرده و نام آن را Anim بگذارید.
مرحله 4 - در اینجا ما چهار انیمیشن ایجاد خواهیم کرد. به مسیر Solution Explorer-> Project Name-> Resources-> Anim بروید، کلیک راست کرده و گزینه ی Add->New Item را بزنید. در پنجره جدیدی که باز می شود، XML را انتخاب کرده و نام آن را Card_flip_left_in.xml بگذارید. به همین روش، ard_flip_left_out.xml, Card_flip_right_in.xml و Card_flip_right_out.xml را نیز ایجاد کنید.




مرحله 5- به مسیر Solution Explorer-> Project Name-> Resources-> values بروید، کلیک راست کرده و یک فایل XML اضافه کنید و نام آن را Integers.xml بگذارید.

مرحله 6 - به فایل Card_flip_left_in.xml بروید و کد های زیر را در آن وارد کنید.
<set xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Before rotating, immediately set the alpha to 0. -->
<objectAnimator
android:valueFrom="1.0"
android:valueTo="0.0"
android:propertyName="alpha"
android:duration="0" />
<!-- Rotate. -->
<objectAnimator
android:valueFrom="-180"
android:valueTo="0"
android:propertyName="rotationY"
android:interpolator="@android:interpolator/accelerate_decelerate"
android:duration="@integer/card_flip_time_full" />
<!-- Half-way through the rotation (see startOffset), set the alpha to 1. -->
<objectAnimator
android:valueFrom="0.0"
android:valueTo="1.0"
android:propertyName="alpha"
android:startOffset="@integer/card_flip_time_half"
android:duration="1" />
</set>
مرحله 7 -به مسیر Solution Explorer-> Project Name-> Resources-> Anim -> card_flip_left_out.xml بروید و کدهای زیر را در فایل مربوطه وارد نمایید.
<set xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Rotate. -->
<objectAnimator
android:valueFrom="0"
android:valueTo="180"
android:propertyName="rotationY"
android:interpolator="@android:interpolator/accelerate_decelerate"
android:duration="@integer/card_flip_time_full" />
<!-- Half-way through the rotation (see startOffset), set the alpha to 0. -->
<objectAnimator
android:valueFrom="1.0"
android:valueTo="0.0"
android:propertyName="alpha"
android:startOffset="@integer/card_flip_time_half"
android:duration="1" />
</set>
مرحله 8- به فایل Card_flip_right-in بروید و کد های زیر را در آن وارد نمایید.
<set xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Before rotating, immediately set the alpha to 0. -->
<objectAnimator
android:valueFrom="1.0"
android:valueTo="0.0"
android:propertyName="alpha"
android:duration="0" />
<!-- Rotate. -->
<objectAnimator
android:valueFrom="180"
android:valueTo="0"
android:propertyName="rotationY"
android:interpolator="@android:interpolator/accelerate_decelerate"
android:duration="@integer/card_flip_time_full" />
<!-- Half-way through the rotation (see startOffset), set the alpha to 1. -->
<objectAnimator
android:valueFrom="0.0"
android:valueTo="1.0"
android:propertyName="alpha"
android:startOffset="@integer/card_flip_time_half"
android:duration="1" />
</set>
مرحله 9 - به فایل card_flip_right_out.xml بروید و کدهای زیر را در آن وارد نمایید.
<set xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Rotate. -->
<objectAnimator
android:valueFrom="0"
android:valueTo="-180"
android:propertyName="rotationY"
android:interpolator="@android:interpolator/accelerate_decelerate"
android:duration="@integer/card_flip_time_full" />
<!-- Half-way through the rotation (see startOffset), set the alpha to 0. -->
<objectAnimator
android:valueFrom="1.0"
android:valueTo="0.0"
android:propertyName="alpha"
android:startOffset="@integer/card_flip_time_half"
android:duration="1" />
</set>
مرحله 10- به مسیر Solution Explorer-> Project Name->Resources->values -> Integers.xml بروید و کدهای زیر را در آن وارد نمایید.

<?xml version="1.0" encoding="utf-8" ?>
<resources>
<integer name="card_flip_time_full">300</integer>
<integer name="card_flip_time_half">150</integer>
</resources>
مرحله 11- به مسیر Solution Explorer-> Project Name->Resources->drawable->Card_Back.axml بروید و کد های زیر را در آن وارد نمایید.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/holo_blue_dark">
<TextView
android:text="Card Back"
android:textAppearance="?android:attr/textAppearanceLarge"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/textView2"
android:gravity="center_horizontal" />
<TextView
android:text="Card Back Side"
android:textAppearance="?android:attr/textAppearanceLarge"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/textView2"
android:gravity="center_horizontal|center_vertical" />
</LinearLayout>
مرحله 12- صفحه MainActivity.cs را باز کرده و در زیر OnCreate() ، یک کلاس برای FlipCard ایجاد کنید.

public void FlipCard()
{
if (Showingback) {
FragmentManager.PopBackStack();
Showingback = false;
} else {
FragmentTransaction trans = FragmentManager.BeginTransaction();
trans.SetCustomAnimations(Resource.Animation.card_flip_right_in, Resource.Animation.card_flip_right_out, Resource.Animation.card_flip_left_in, Resource.Animation.card_flip_left_out);
trans.Replace(Resource.Id.frameLayout1, new CardBackFragment());
trans.AddToBackStack(null);
trans.Commit();
Showingback = true;
}
}
مرحله 13- تابع Back_card را مطابق زیر ایجاد کنید.

کد #C
public class CardBackFragment: Fragment
{
public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View backcard_view = inflater.Inflate(Resource.Layout.Card_Back, container, false);
backcard_view.Touch += Backcard_view_Touch;
return backcard_view;
}
private void Backcard_view_Touch(object sender, View.TouchEventArgs e) {
MainActivity myactivity = Activity as MainActivity;
myactivity.gesturedetector.OnTouchEvent(e.Event);
}
}
مرحله 14- MyGestureListener را باز کنید و کدهای زیر را در آن اضافه کنید.

کد #C
public class MyGestureListener: GestureDetector.SimpleOnGestureListener
{
private MainActivity mainActivity;
public MyGestureListener(MainActivity Activity) {
mainActivity = Activity;
}
public override bool OnDoubleTap(MotionEvent e) {
//Console.WriteLine("Double Tab");
mainActivity.FlipCard();
return true;
}
public override void OnLongPress(MotionEvent e) {
Console.WriteLine("Long Press");
}
public override bool OnFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
Console.WriteLine("Fling");
return base.OnFling(e1, e2, velocityX, velocityY);
}
public override bool OnScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
Console.WriteLine("Scroll");
return base.OnScroll(e1, e2, distanceX, distanceY);
}
}
مرحله 15-برنامه را اجرا کنید تا خروجی را ببینید.

- Xamarin
- 1k بازدید
- 3 تشکر