ฉันจะกำหนดช่วงการเปลี่ยนภาพระหว่างสองกิจกรรมสำหรับ Android 1.5 และใหม่กว่าได้อย่างไร ฉันต้องการกิจกรรมที่จะจางหายไป
ฉันจะกำหนดช่วงการเปลี่ยนภาพระหว่างสองกิจกรรมสำหรับ Android 1.5 และใหม่กว่าได้อย่างไร ฉันต้องการกิจกรรมที่จะจางหายไป
คำตอบ:
Activity.overridePendingTransition()
คุณสามารถทำเช่นนี้กับ คุณสามารถกำหนดภาพเคลื่อนไหวการเปลี่ยนแปลงอย่างง่ายในไฟล์ทรัพยากร XML
onCreate
ฟังก์ชั่นกิจกรรมของคุณ
นี่คือรหัสที่จะทำเรียบเนียนดีระหว่างสองกิจกรรม ..
สร้างไฟล์ที่เรียกว่าfadein.xml
ในres/anim
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_interpolator"
android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="2000" />
สร้างไฟล์ที่เรียกว่าfadeout.xml
ในres/anim
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_interpolator"
android:fromAlpha="1.0" android:toAlpha="0.0" android:duration="2000" />
ถ้าคุณต้องการที่จะจางหายไปจากกิจกรรมเพื่อกิจกรรม Bใส่ต่อไปนี้ในonCreate()
วิธีการสำหรับกิจกรรม B ก่อนsetContentView()
ทำงานให้ฉัน
overridePendingTransition(R.anim.fadein, R.anim.fadeout);
หากการจางหายช้าเกินไปสำหรับคุณให้เปลี่ยนandroid:duration
ไฟล์ xml ด้านบนเป็นสิ่งที่เล็กกว่า
overridePendingTransition(android.R.anim.fadein, android.R.anim.fadeout);
ดูไฟล์เหล่านั้นอาจให้คำแนะนำเกี่ยวกับวิธีการปรับปรุงแอนิเมชั่นที่คุณกำหนดเอง (เช่นการทำให้จางหายไปนานกว่า
fadein
และfadeout
การและfade_in
fade_out
จากโพสต์ของ Dan J
overridePendingTransition()
ขวาหลังจากโทรและfinish()
/ หรือ startActivity()
ฉันทำได้ดีด้วยวิธีนี้โดยเรียกมันว่าหลังจากเปิดตัวกิจกรรมใหม่
วิธีง่ายๆในการทำคือ:
<style name="WindowAnimationTransition"> <item name="android:windowEnterAnimation">@android:anim/fade_in</item> <item name="android:windowExitAnimation">@android:anim/fade_out</item> </style>
<style name="AppBaseTheme" parent="Theme.Material.Light.DarkActionBar"> <item name="android:windowAnimationStyle">@style/WindowAnimationTransition</item> </style>
แค่นั้นแหละ :)
ใช่. คุณสามารถบอกระบบปฏิบัติการว่าคุณต้องการเปลี่ยนแปลงอะไรสำหรับกิจกรรมของคุณ
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
getWindow().setWindowAnimations(ANIMATION);
...
}
โดยที่ ANIMATION เป็นจำนวนเต็มที่อ้างถึงภาพเคลื่อนไหวที่มีอยู่แล้วในระบบปฏิบัติการ
สร้างความต้านทาน> anim> fadein.xml
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_interpolator"
android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="500" />
สร้าง res> anim> fadeout.xml
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_interpolator"
android:fromAlpha="1.0" android:toAlpha="0.0" android:duration="500" />
ใน res> values> styles.xml
<style name="Fade">
<item name="android:windowEnterAnimation">@anim/fadein</item>
<item name="android:windowExitAnimation">@anim/fadeout</item>
</style>
ในกิจกรรม onCreate ()
getWindow().getAttributes().windowAnimations = R.style.Fade;
overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
สำหรับรายการภาพเคลื่อนไหวเริ่มต้นโปรดดูที่: http://developer.android.com/reference/android/R.anim.html
มีอยู่จริงfade_in
และfade_out
สำหรับ API ระดับ 1 ขึ้นไป
ฉันเขียนทับภาพเคลื่อนไหวกิจกรรมเริ่มต้นของฉัน ฉันทดสอบใน api 15 ว่าทำงานได้อย่างราบรื่น นี่คือทางออกที่ฉันใช้:
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorPrimary</item>
<item name="android:windowAnimationStyle">@style/CustomActivityAnimation</item>
</style>
<style name="CustomActivityAnimation" parent="@android:style/Animation.Activity">
<item name="android:activityOpenEnterAnimation">@anim/slide_in_right</item>
<item name="android:activityOpenExitAnimation">@anim/slide_out_left</item>
<item name="android:activityCloseEnterAnimation">@anim/slide_in_left</item>
<item name="android:activityCloseExitAnimation">@anim/slide_out_right</item>
</style>
สร้างโฟลเดอร์แอนิเมชั่นภายใต้โฟลเดอร์ res จากนั้นสร้างไฟล์แอนิเมชันสี่ไฟล์:
slide_in_right.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="100%p" android:toXDelta="0"
android:duration="@android:integer/config_mediumAnimTime"/>
</set>
slide_out_left.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="0" android:toXDelta="-100%p"
android:duration="@android:integer/config_mediumAnimTime"/>
</set>
slide_in_left.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="-100%p" android:toXDelta="0"
android:duration="@android:integer/config_mediumAnimTime"/>
</set>
slide_out_right.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="0" android:toXDelta="100%p"
android:duration="@android:integer/config_mediumAnimTime"/>
</set>
คุณสามารถดาวน์โหลดของฉันโครงการตัวอย่าง
นั่นคือทั้งหมด ... :)
นี่คือรหัสที่จะทำให้ราบรื่นระหว่างสองกิจกรรม
ผลราบรื่นจากซ้ายไปขวา
สร้างไฟล์ชื่อ slide_in_right.xml และ slide_out_right.xml ใน res / anim
slide_in_right.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false" >
<translate android:duration="5000" android:fromXDelta="100%" android:toXDelta="0%" />
<alpha android:duration="5000" android:fromAlpha="0.0" android:toAlpha="1.0" />
</set>
slide_out_right.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false" >
<translate android:duration="5000" android:fromXDelta="0%" android:toXDelta="-100%"/>
<alpha android:duration="5000" android:fromAlpha="1.0" android:toAlpha="0.0" />
</set>
ผลราบรื่นจากขวาไปซ้าย
สร้างไฟล์ชื่อ animation_enter.xml และ animation_leave.xml ใน res / anim
animation_enter.xml
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false">
<translate android:fromXDelta="-100%" android:toXDelta="0%"
android:fromYDelta="0%" android:toYDelta="0%"
android:duration="700"/>
</set>
animation_leave.xml
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false">
<translate
android:fromXDelta="0%" android:toXDelta="100%"
android:fromYDelta="0%" android:toYDelta="0%"
android:duration="700" />
</set>
นำทางจากกิจกรรมหนึ่งไปยังกิจกรรมที่สอง
Intent intent_next=new Intent(One_Activity.this,Second_Activity.class);
overridePendingTransition(R.anim.slide_in_right,R.anim.slide_out_right);
startActivity(intent_next);
finish();
4. เมื่อกดกลับเหตุการณ์หรือนำทางจากกิจกรรมที่สองไปยังหนึ่งกิจกรรม
Intent home_intent = new Intent(Second_Activity.this, One_Activity.class);
overridePendingTransition(R.anim.animation_enter, R.anim.animation_leave);
startActivity(home_intent);
finish();
overridePendingTransition
ทันทีหลัง startActivity: developer.android.com/reference/android/app/…
คุณไม่สามารถใช้ overridePendingTransition ใน Android 1.5 overridePendingTransistion มาถึง Android 2.0
หากคุณจะทำสิ่งนี้โดยไม่มีข้อผิดพลาดคุณต้องรวบรวมเป้าหมาย (1.5 หรือสูงกว่า) โดยใช้ภาพเคลื่อนไหวปกติ (หรือคุณเป็นเจ้าของ) หรือคุณต้องรวบรวมเป้าหมาย (2.0 หรือสูงกว่า) โดยใช้ overridePendingTransistion
สรุป: คุณไม่สามารถใช้ overridePendingTransistion ใน Android 1.5
คุณสามารถใช้ภาพเคลื่อนไหวในตัวในระบบปฏิบัติการได้
ในอุปกรณ์ GALAXY:
คุณต้องแน่ใจว่าคุณไม่ได้ปิดมันลงในอุปกรณ์โดยใช้การตั้งค่า> ตัวเลือกสำหรับนักพัฒนา:
ใช้ ActivityCompat.startActivity () ทำงาน API> 21
ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(activity, transitionImage, EXTRA_IMAGE);
ActivityCompat.startActivity(activity, intent, options.toBundle());
ก่อนที่จะเริ่มเจตนาของคุณ:
ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(AlbumListActivity.this);
startActivity(intent, options.toBundle());
สิ่งนี้จะให้แอนิเมชั่นเริ่มต้นสำหรับการเปลี่ยนกิจกรรมของคุณ
Android บางรุ่นรองรับการActivity
เปลี่ยนถ่ายที่กำหนดเองและบางรุ่นไม่รองรับ (อุปกรณ์รุ่นเก่า) หากคุณต้องการที่จะใช้การเปลี่ยนที่กำหนดเองเป็นวิธีที่ดีที่จะตรวจสอบว่าActivity
มีoverridePendingTransition()
วิธีการหรือไม่
หากต้องการทราบว่ามีวิธีการดังกล่าวหรือไม่สามารถใช้ API การสะท้อนกลับได้ นี่คือรหัสง่าย ๆ ที่จะตรวจสอบและส่งคืนเมธอดหากมีอยู่:
Method mOverridePendingTransition;
try {
mOverridePendingTransition = Activity.class.getMethod(
"overridePendingTransition", new Class[] { Integer.TYPE, Integer.TYPE } );
/* success */
} catch (NoSuchMethodException nsme) {
/* failure, this version of Android doesn't have this method */
}
จากนั้นเราสามารถใช้การเปลี่ยนแปลงของเราเองเช่นใช้วิธีนี้หากมีอยู่:
if (UIConstants.mOverridePendingTransition != null) {
try {
UIConstants.mOverridePendingTransition.invoke(MainActivity.this, R.anim.activity_fade_in, R.anim.activity_fade_out);
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
ตัวอย่างเช่นภาพเคลื่อนไหวเฟดอินและเฟดเอ้าท์ง่าย ๆ ถูกใช้สำหรับการสาธิตการเปลี่ยนภาพ
ขยายภาพเคลื่อนไหวออก
Intent i = new Intent(getApplicationContext(), LoginActivity.class);
overridePendingTransition(R.anim.zoom_enter, R.anim.zoom_exit);
startActivity(i);
finish();
zoom_enter
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_interpolator"
android:fromAlpha="0.0" android:toAlpha="1.0"
android:duration="500" />
zoom_exit
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_interpolator"
android:fromAlpha="1.0" android:toAlpha="0.0"
android:fillAfter="true"
android:duration="500" />
overridePendingTransition
กับคำตอบที่เกี่ยวข้องทั้งหมดด้านล่าง: คุณสามารถผ่าน(0, 0)
หากคุณไม่ต้องการให้มีภาพเคลื่อนไหว