Android:Activity移入移出効果

9233 ワード

この効果はiosでよく見られますが、Androidバージョンの微信でも似たようなスタイルです.つまり、次のレベルのインタフェースに入るときです.
現在のインタフェースは左に移動し、次のインタフェースは左に移動します.
現在のインタフェースから前のインタフェースに戻るとき:
現在のインタフェースは右に移動し、前のインタフェースは右に移動します.
実装コードは次のとおりです.
1.2つのActivity
package com.example.activityslideinout;

import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class FirstActivity extends Activity {

    private static final String TAG = "FirstActivity";

   @Override
    protected void onCreate(Bundle savedInstanceState) {
	super.onCreate(savedInstanceState);
	Log.i(TAG,"onCreate");
	//overridePendingTransition(R.anim.pull_in_right, R.anim.push_out_left);
	setContentView(R.layout.activity_first);
	Button btnGo = (Button) findViewById(R.id.button1);
	btnGo.setOnClickListener(new OnClickListener() {

	    @Override
	    public void onClick(View arg0) {
		// TODO Auto-generated method stub
		Intent intent = new Intent(FirstActivity.this,
			SecondActivity.class);
		startActivity(intent);
		//First Activity Move Left and out,Second Activity Move Left and In
		overridePendingTransition(R.anim.pull_in_right, R.anim.push_out_left);
	    }
	});
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
	// Inflate the menu; this adds items to the action bar if it is present.
	getMenuInflater().inflate(R.menu.first, menu);
	return true;
    }

    @Override
    public void onBackPressed() {
	super.onBackPressed();
	//overridePendingTransition(R.anim.pull_in_right, R.anim.push_out_left);
    }
}
package com.example.activityslideinout;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class SecondActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
	super.onCreate(savedInstanceState);
	//overridePendingTransition(R.anim.pull_in_right, R.anim.push_out_left);
	setContentView(R.layout.activity_second);
	Button btnBack = (Button) findViewById(R.id.button1);
	btnBack.setOnClickListener(new OnClickListener() {

	    @Override
	    public void onClick(View arg0) {
		// TODO Auto-generated method stub
		Intent intent = new Intent(SecondActivity.this,
			FirstActivity.class);
		startActivity(intent);
		//Second Move Right and out,First Move Left and In
		overridePendingTransition(R.anim.pull_in_left, R.anim.push_out_right);
	    }
	});
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
	// Inflate the menu; this adds items to the action bar if it is present.
	getMenuInflater().inflate(R.menu.first, menu);
	return true;
    }

    @Override
    public void onBackPressed() {
	super.onBackPressed();
	overridePendingTransition(R.anim.pull_in_right, R.anim.push_out_left);
    }
}

2.対応するlayout xml
activity_first.xml
<RelativeLayout 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"
    tools:context=".FirstActivity" >

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:text="Go" />

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/button1"
        android:layout_below="@+id/button1"
        android:layout_marginLeft="54dp"
        android:layout_marginTop="32dp"
        android:text="@string/firstactivity" />

</RelativeLayout>

activity_second.xml
<RelativeLayout 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"
    tools:context=".FirstActivity" >

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/textView1"
        android:layout_alignParentTop="true"
        android:text="Back" />

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/button1"
        android:layout_marginLeft="18dp"
        android:layout_marginTop="18dp"
        android:text="@string/secondactivity" />

    <TextView
        android:id="@+id/TextView01"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/textView1"
        android:layout_below="@+id/textView1"
        android:layout_marginTop="37dp"
        android:text="@string/secondactivity" />

</RelativeLayout>

3.resでanimディレクトリを作成し、4つのanimationファイルを追加
pull_in_left.xml
<?xml version="1.0" encoding="utf-8"?>
<!-- move current activity to left and in -->
<!-- First Activity Goes Here From Second Activity Back -->
<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="500"
    android:fromXDelta="-100%"
    android:fromYDelta="0%"
    android:interpolator="@android:anim/decelerate_interpolator"
    android:toXDelta="0%"
    android:toYDelta="0%" />

pull_in_right.xml
<?xml version="1.0" encoding="utf-8"?>
<!-- move current activity to right and in -->
<!-- Second Activity Goes Here -->
<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="500"
    android:fromXDelta="100%"
    android:fromYDelta="0%"
    android:interpolator="@android:anim/decelerate_interpolator"
    android:toXDelta="0%"
    android:toYDelta="0%" />

push_out_left.xml
<?xml version="1.0" encoding="utf-8"?>
<!-- move current activity to left and out -->
<!-- Second Activity Will Go Here And First Activity Move left and out -->
<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="500"
    android:fromXDelta="0%"
    android:fromYDelta="0%"
    android:interpolator="@android:anim/decelerate_interpolator"
    android:toXDelta="-100%"
    android:toYDelta="0%" />

push_out_right.xml
<?xml version="1.0" encoding="utf-8"?>

<!-- move current activity to right and out -->
<!-- Second Activity Move right and out when Back to First Activity  -->
<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="500"
    android:fromXDelta="0%"
    android:fromYDelta="0%"
    android:interpolator="@android:anim/decelerate_interpolator"
    android:toXDelta="100%"
    android:toYDelta="0%" />

4. strings.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>

    <string name="app_name">ActivitySlideInOut</string>
    <string name="action_settings">Settings</string>
    <string name="hello_world">Hello world!</string>
    <string name="firstactivity">I\'m the first Activity</string>
    <string name="secondactivity">I\'m the second activity.</string>

</resources>