สไลด์ภาพเคลื่อนไหวสไลด์จากซ้ายไปขวา


186

ฉันมีสามกิจกรรมที่โหมดเปิดใช้เป็นอินสแตนซ์เดียว
ใช้onfling()ฉันแกว่งไปทางซ้ายและขวา

ปัญหาคือเมื่อฉันปัดจากขวาไปซ้ายการเปลี่ยนสไลด์ไม่เป็นไร แต่เมื่อฉันปัดซ้ายไปขวาฉันจะได้รับการเปลี่ยนจากการเลื่อนจากขวาไปซ้าย

ฉันรู้ว่าทำไมสิ่งนี้ถึงเกิดขึ้นเพราะฉันมักจะส่งจุดประสงค์ใหม่ แต่ตอนนี้ฉันต้องเปลี่ยนอนิเมชั่นของการเลื่อนจากซ้ายไปขวา

ฉันรู้ว่ามีวิธีชื่อoverridingTransitionPending()แต่ฉันไม่ทราบวิธีกำหนดภาพเคลื่อนไหวของฉันใน XML


4
หากคุณไม่สนใจการถามของฉันคุณใช้อะไรเป็นตัวจัดกิจกรรมไว้จนกว่าคุณจะรูด
Andy

ช้าไปหน่อย แต่คุณสามารถใช้ไฟล์ hold.xml แบบง่ายๆที่มี 0% สำหรับเดลตาทั้งหมด
clifgray

คำตอบ:


397

ใช้ xml นี้ใน res/anim/

นี่เป็นภาพเคลื่อนไหวจากซ้ายไปขวา:

<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>

นี่เป็นภาพเคลื่อนไหวจากขวาไปซ้าย:

<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>

ในการเข้ารหัสใช้ความตั้งใจเช่นจากซ้ายไปขวา:

this.overridePendingTransition(R.anim.animation_enter,
                   R.anim.animation_leave);

ในการเข้ารหัสของคุณใช้ความตั้งใจเช่นจากขวาไปซ้าย

this.overridePendingTransition(R.anim.animation_leave,
                               R.anim.animation_enter);

2
โอกาสใด ๆ ที่เราสามารถใช้ android.view.animation.Animation ใน Java แทนการกำหนดใน XML? ฉันใช้คลาส Animation สำหรับ ViewFlipper ของฉันอยู่แล้วและฉันต้องการนำมาใช้ซ้ำสำหรับ overrideTransitionPending ()
IgorGanapolsky

1
ฉันจะให้ภาพเคลื่อนไหวได้หรือไม่ฉันกำลังถอดรหัสภาพและตั้งค่าในมุมมองภาพฉันต้องการเปลี่ยนในแต่ละการพุ่งฉันต้องการให้ภาพตั้งค่าด้วยเอฟเฟกต์
Sreedev R

1
ฉันลองสิ่งนี้ในโครงการงานอดิเรกที่ฉันทำงานอยู่และมันก็ใช้งานได้ดีมาก! มีวิธีการตั้งค่าตัวแปรภายนอกเช่นระยะเวลาการผ่อนคลาย ฯลฯ เมื่อทำงานกับภาพเคลื่อนไหวที่ใช้ xml หรือไม่?
Daniel Saidi

7
ไฟล์ใดข้างต้นคือ animation_leave.xml และ animation_enter.xml
แจสเปอร์

1
ขอบคุณ ฉันสังเกตเห็นปัญหาแม้ว่า; สำหรับภาพเคลื่อนไหวจากขวาไปซ้ายคุณสลับค่า XDelta ควรเป็น android: fromXDelta = "100%" android: toXDelta = "0%"
Ricardo

150

หากคุณต้องการให้การเปลี่ยนแปลงสำหรับแอปพลิเคชั่นทั้งหมดคุณสามารถสร้างrootacivityและสืบทอดในกิจกรรมที่คุณต้องการ ในรูทกิจกรรมของการสร้าง onCreate overridePendingTransitionด้วยทิศทางที่ต้องการ และonStartโทรoverridePendingTransitionไปในทิศทางอื่นหากทำกิจกรรมต่อ ที่นี่ฉันจะให้รหัสทำงานเต็มด้านล่างแก้ไขฉันถ้าฉันผิด

สร้างไฟล์ xml นี้ในโฟลเดอร์แอนิเมชั่นของคุณ

anim_slide_in_left.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
    <translate
        android:duration="600"
        android:fromXDelta="100%"
        android:toXDelta="0%" >
    </translate>
</set>

anim_slide_in_right.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
    <translate
        android:duration="600"
        android:fromXDelta="-100%"
        android:toXDelta="0%" >
    </translate>
</set>

anim_slide_out_left.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
    <translate
        android:duration="600"
        android:fromXDelta="0%"
        android:toXDelta="-100%" >
    </translate>
</set>

anim_slide_out_right.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
    <translate
        android:duration="600"
        android:fromXDelta="0%"
        android:toXDelta="100%" >
    </translate>
</set>

RootActivity

import android.app.Activity;
import android.os.Bundle;

public class RootActivity extends Activity {
    int onStartCount = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        onStartCount = 1;
        if (savedInstanceState == null) // 1st time
        {
            this.overridePendingTransition(R.anim.anim_slide_in_left,
                    R.anim.anim_slide_out_left);
        } else // already created so reverse animation
        { 
            onStartCount = 2;
        }
    }

    @Override
    protected void onStart() {
        // TODO Auto-generated method stub
        super.onStart();
        if (onStartCount > 1) {
            this.overridePendingTransition(R.anim.anim_slide_in_right,
                    R.anim.anim_slide_out_right);

        } else if (onStartCount == 1) {
            onStartCount++;
        }

    }

}

FirstActivity

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class FirstActivity extends RootActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        TextView tv = (TextView) findViewById(R.id.tvTitle);
        tv.setText("First Activity");
        Button bt = (Button) findViewById(R.id.buttonNext);
        bt.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent i = new Intent(FirstActivity.this, SecondActivity.class);
                startActivity(i);

            }
        });
    }

}

SecondActivity

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class SecondActivity extends RootActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        TextView tv = (TextView) findViewById(R.id.tvTitle);
        tv.setText("Second Activity");
        Button bt = (Button) findViewById(R.id.buttonNext);
        bt.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent i = new Intent(SecondActivity.this, ThirdActivity.class);
                startActivity(i);

            }
        });

    }

}

ThirdActivity

import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class ThirdActivity extends RootActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        TextView tv = (TextView) findViewById(R.id.tvTitle);
        tv.setText("Third Activity");
        Button bt = (Button) findViewById(R.id.buttonNext);
        bt.setText("previous");
        bt.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();

            }
        });
    }

}

และในที่สุดก็ เผยให้เห็น

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.transitiontest"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="18" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.example.transitiontest.FirstActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name="com.example.transitiontest.SecondActivity"
            android:label="@string/app_name" >
        </activity>
        <activity
            android:name="com.example.transitiontest.ThirdActivity"
            android:label="@string/app_name" >
        </activity>
    </application>

</manifest>

ฉันรู้ว่านี่เป็นโพสต์เก่าจริง ๆ แต่ฉันไม่สามารถทำให้ onUpNavigation โหลดแอนิเมชั่นสไลด์จากขวาไปซ้ายได้ทันที (หลังจากสร้างกิจกรรม) ทุกครั้งไม่ว่าจะทำอะไรก็ทำแอนิเมชั่นซ้ายไปขวา ใครมีความคิดเห็นบ้าง ???
Ryan C

1
วิธีการแก้ปัญหานี้อาจทำให้ผู้ใช้ล้มเหลวเราต้องใช้ objectAnimator โปรดอ้างอิงstackoverflow.com/questions/17760299/…
Swapnil

คำตอบนั้นควรเป็นคำตอบที่ยอมรับได้ เป็นที่เข้าใจและใช้งานได้ดีจริงๆ
ahmet

69

สร้างโค้ดตัวอย่างที่ใช้งานแบบเดียวกันโดยใช้เอฟเฟ็กต์สไลด์จากซ้าย, ขวา, บนและล่าง (สำหรับผู้ที่ไม่ต้องการสร้างไฟล์ xml สำหรับเคลื่อนไหวทั้งหมด :))

ชำระเงินรหัสบนGitHub


32

หากคุณต้องการใช้ภาพเคลื่อนไหวใน " กิจกรรม " เริ่ม จากนั้นเขียนโค้ดด้านล่าง

startActivity(intent);
overridePendingTransition(R.anim.opening_anim, R.anim.closing_anim);

หากคุณต้องการใช้ภาพเคลื่อนไหวใน " กล่องโต้ตอบ " จากนั้นเพิ่มรหัสด้านล่างลงในstyles.xmlไฟล์ก่อน

<style name="my_style”> 
 <item 
  name="@android:windowEnterAnimation">@anim/opening_anim</item> 
 <item 
 name="@android:windowExitAnimation">@anim/closing_anim</item>
</style>

ใช้สไตล์นี้ตามที่ฉันกำหนดไว้ด้านล่าง

final Dialog dialog = new Dialog(activity);
dialog.getWindow().getAttributes().windowAnimations = R.style.my_style;

หากคุณต้องการใช้ภาพเคลื่อนไหวใน " มุมมอง " ให้เขียนโค้ดด้านล่าง

txtMessage = (TextView) findViewById(R.id.txtMessage);
     
// load the animation
Animation animFadein = AnimationUtils.loadAnimation(getApplicationContext(),R.anim.animation); 

// start the animation
txtMessage.startAnimation(animFadein);

ด้านล่างฉันได้กล่าวถึง.xmlรหัสภาพเคลื่อนไหวส่วนใหญ่

ปรากฏขึ้น - ทำให้มันเป็นเพียงแค่ปรากฏขึ้น xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <alpha
        android:interpolator="@android:anim/accelerate_interpolator"
        android:duration="1"
           android:fromAlpha="1.0"
           android:toAlpha="1.0"/>
</set>

===========================================

ทำให้มันค่อย ๆ จางหายไปใน view.xml

<?xml version="1.0" encoding="UTF-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <alpha
        android:fromAlpha="0.0"
        android:toAlpha="1.0"
        android:interpolator="@android:anim/accelerate_interpolator" 
        android:duration="300"
        android:repeatCount="0" />
</set>

==========================================

fadeout - ทำให้ช้าลงจาก view.xml

<?xml version="1.0" encoding="UTF-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <alpha
        android:fromAlpha="1.0"
        android:toAlpha="0.0"
        android:interpolator="@android:anim/accelerate_interpolator" 
        android:duration="300"
        android:repeatCount="0" />
</set>

==========================================

push_down_in.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate android:fromYDelta="-100%p" android:toYDelta="0" android:duration="400"/>
</set>

==========================================

push_down_out.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate android:fromYDelta="0" android:toYDelta="100%p" android:duration="400"/>
</set>

==========================================

push_left_in.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="300"/>
    <alpha android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="300" />
</set>

==========================================

push_left_out.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="300"/>
    <alpha android:fromAlpha="1.0" android:toAlpha="0.0" android:duration="300" />
</set>

==========================================

push_right_in.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="300"/>
    <alpha android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="300" />
</set>

==========================================

push_right_out.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="300"/>
    <alpha android:fromAlpha="1.0" android:toAlpha="0.0" android:duration="300" />
</set>

==========================================

push_up_in.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate android:fromYDelta="100%p" android:toYDelta="0" android:duration="300"/>
    <alpha android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="300" />
</set>

==========================================

push_up_out.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate android:fromYDelta="0" android:toYDelta="-100%p" android:duration="300"/>
    <alpha android:fromAlpha="1.0" android:toAlpha="0.0" android:duration="300" />
</set>

==========================================

rotation.xml

<?xml version="1.0" encoding="utf-8"?>
<rotate
 xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromDegrees="0"
    android:toDegrees="-90"
    android:pivotX="50%"
    android:pivotY="50%"
    android:duration="0" android:fillAfter="true">
</rotate>

==========================================

scale_from_corner.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <scale android:fromYScale="0" android:toYScale="1.0"
        android:fromXScale="0" android:toXScale="1.0" 
        android:duration="500" android:pivotX="100%"
        android:pivotY="100%" />
</set>

==========================================

scale_torwards_corner.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <scale android:fromYScale="1.0" android:toYScale="0"
        android:fromXScale="1.0" android:toXScale="0" 
        android:duration="500"/>
</set>

==========================================

shrink_and_rotate_a (ถึงแก่กรรม) .xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<scale
    android:fromXScale="1.0" android:toXScale="0.8"
    android:fromYScale="1.0" android:toYScale="0.8"
    android:pivotX="50%p" android:pivotY="50%p"
    android:interpolator="@android:anim/accelerate_interpolator"
    android:duration="100"
/>
<scale
    android:fromXScale="1.0" android:toXScale="0.0"
    android:fromYScale="1.0" android:toYScale="1.0"
    android:pivotX="50%p" android:pivotY="50%p"
    android:interpolator="@android:anim/accelerate_interpolator"
    android:duration="150"
    android:startOffset="100"
/>

==========================================

shrink_and_rotate_b (ทางเข้า) .xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<scale
    android:fromXScale="0.0" android:toXScale="1.0"
    android:fromYScale="1.0" android:toYScale="1.0"
    android:pivotX="50%p" android:pivotY="50%p"
    android:interpolator="@android:anim/accelerate_interpolator"
    android:duration="150"
    android:startOffset="250"
/>

<scale
    android:fromXScale="0.8" android:toXScale="1.0"
    android:fromYScale="0.8" android:toYScale="1.0"
    android:pivotX="50%p" android:pivotY="50%p"
    android:interpolator="@android:anim/accelerate_interpolator"
    android:duration="100"
    android:startOffset="400"
/>

========================================

blink.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <alpha android:fromAlpha="0.0"
      android:toAlpha="1.0"
      android:interpolator="@android:anim/accelerate_interpolator"
      android:duration="800"
      android:repeatMode="reverse"
      android:repeatCount="infinite"/>
</set>

========================================

ZoomIn.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
   android:fillAfter="true" >
    <scale
       xmlns:android="http://schemas.android.com/apk/res/android"
       android:duration="1000"
       android:fromXScale="1"
       android:fromYScale="1"
       android:pivotX="50%"
       android:pivotY="50%"
       android:toXScale="3"
       android:toYScale="3" >
    </scale>
</set>

========================================

ZoomOut.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
   android:fillAfter="true" >
    <scale
       xmlns:android="http://schemas.android.com/apk/res/android"
       android:duration="1000"
       android:fromXScale="1.0"
       android:fromYScale="1.0"
       android:pivotX="50%"
       android:pivotY="50%"
       android:toXScale="0.5"
       android:toYScale="0.5" >
    </scale>
</set>

========================================

FadeIn.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
   android:fillAfter="true" >
    <alpha
       android:duration="1000"
       android:fromAlpha="0.0"
       android:interpolator="@android:anim/accelerate_interpolator"
       android:toAlpha="1.0" />
</set>

========================================

FadeOut.xml

<set xmlns:android="http://schemas.android.com/apk/res/android"
   android:fillAfter="true" >
    <alpha
       android:duration="1000"
       android:fromAlpha="1.0"
       android:interpolator="@android:anim/accelerate_interpolator"
       android:toAlpha="0.0" />
</set>

========================================

Move.xml

<?xml version="1.0" encoding="utf-8"?>
<set
   xmlns:android="http://schemas.android.com/apk/res/android"
   android:interpolator="@android:anim/linear_interpolator"
   android:fillAfter="true">
   <translate
       android:fromXDelta="0%p"
       android:toXDelta="80%p"
       android:duration="1000" />
</set>

========================================

SlideDown.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
   android:fillAfter="true">
    <scale
       android:duration="800"
       android:fromXScale="1.0"
       android:fromYScale="0.0"
       android:interpolator="@android:anim/linear_interpolator"
       android:toXScale="1.0"
       android:toYScale="1.0" />
</set>

========================================

SlideUp.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
   android:fillAfter="true" >
    <scale
       android:duration="800"
       android:fromXScale="1.0"
       android:fromYScale="1.0"
       android:interpolator="@android:anim/linear_interpolator"
       android:toXScale="1.0"
       android:toYScale="0.0" />
</set>

========================================

Bounce.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
   android:fillAfter="true"
   android:interpolator="@android:anim/bounce_interpolator">
    <scale
       android:duration="800"
       android:fromXScale="1.0"
       android:fromYScale="0.0"
       android:toXScale="1.0"
       android:toYScale="1.0" />
</set>

ด้วยความยินดี! @VishrutMavani
เจ้าชาย

2
คอลเลกชันของภาพเคลื่อนไหวที่ดี!
sebasira

16

คุณสามารถเขียนทับภาพเคลื่อนไหวกิจกรรมเริ่มต้นของคุณ นี่คือทางออกที่ฉันใช้:

สร้าง "CustomActivityAnimation" และเพิ่มสิ่งนี้ในธีมพื้นฐานของคุณโดย "windowAnimationStyle"

<!-- 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>

นี่คือโครงการตัวอย่างของฉันใน GitHub

นั่นคือทั้งหมด ... การเข้ารหัสที่มีความสุข :)


คุณเพิ่มสไตล์ให้กับรายการแอปของคุณหรือไม่ ฉันเพิ่งสร้างโครงการตัวอย่างให้คุณ github.com/ShohanAhmed/หากไม่ได้ผลโปรดแจ้งชื่ออุปกรณ์และรุ่น Android ที่ใช้งานไม่ได้ ขอบคุณ
Shohan Ahmed Sijan

Samsung SHV-E300S (S4 ภาษาเกาหลี) android เวอร์ชั่น 5.0.1
Hanzala

ทางออกที่ดีที่สุดตลอดกาล
Ahamadullah Saikat

14

นอกจากนี้คุณสามารถทำสิ่งนี้:

FirstClass.this.overridePendingTransition(android.R.anim.slide_in_left, android.R.anim.slide_out_right);

และคุณไม่จำเป็นต้องเพิ่มแอนิเมชั่น xml


การเปลี่ยนเป็นชนิดที่ช้า มีวิธีใดที่จะทำให้เร็วขึ้นโดยไม่เพิ่มไฟล์ภาพเคลื่อนไหวใด ๆ
Micro

2

ฉันไม่สามารถหาวิธีแก้ปัญหาสำหรับภาพเคลื่อนไหวประเภทนี้โดยใช้ ViewPropertyAnimator

นี่คือตัวอย่าง:

เค้าโครง:

<FrameLayout
android:id="@+id/child_view_container"
android:layout_width="match_parent"
android:layout_height="wrap_content">

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/child_view"
        android:gravity="center_horizontal"
        android:layout_gravity="center_horizontal"
    />
</FrameLayout>

ภาพเคลื่อนไหว - มุมมองจากขวาไปซ้ายและออก:

final childView = findViewById(R.id.child_view);
View containerView = findViewById(R.id.child_view_container);
childView.animate()
  .translationXBy(-containerView.getWidth())
  .setDuration(TRANSLATION_DURATION)
  .setInterpolator(new AccelerateDecelerateInterpolator())
  .setListener(new AnimatorListenerAdapter() {
    @Override
    public void onAnimationEnd(Animator animation) {
        childView.setVisibility(View.GONE);
    }
});

ภาพเคลื่อนไหว - จากขวาไปซ้ายเข้าสู่มุมมอง:

final View childView = findViewById(R.id.child_view);
View containerView = findViewById(R.id.child_view_container);
childView.setTranslationX(containerView.getWidth());
childView.animate()
    .translationXBy(-containerView.getWidth())
    .setDuration(TRANSLATION_DURATION)
    .setInterpolator(new AccelerateDecelerateInterpolator())
    .setListener(new AnimatorListenerAdapter() {
        @Override
        public void onAnimationStart(Animator animation) {
            childView.setVisibility(View.VISIBLE);
        }
    });

ฉันสามารถแสดงจากขวาไปซ้ายได้ไหม เนื่องจากภาพเคลื่อนไหว - จากขวาไปซ้ายและออกจากมุมมองจะซ่อนเนื้อหาไปทางซ้าย เป้าหมายของฉันคือการแสดงจากขวาไปซ้าย
IntoTheDeep


0

สำหรับสไลด์จากขวาไปซ้าย

ความละเอียด / Anim / in.xml:

<?xml version="1.0" encoding="utf-8"?>
<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>

ความละเอียด / Anim / out.xml:

<?xml version="1.0" encoding="utf-8"?>
<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>

ในไฟล์กิจกรรม Java:

Intent intent = new Intent(HomeActivity.this, ActivityCapture.class);
startActivity(intent);
overridePendingTransition(R.anim.in,R.anim.out);

คุณสามารถเปลี่ยนระยะเวลาในไฟล์ xml สำหรับภาพเคลื่อนไหวสไลด์ที่ยาวขึ้นหรือสั้นลง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.