2016-05-22 4 views
3

私は2つのアクティビティを持っています。最初のものはスプラッシュ画面で、中央にロゴがあります。 2番目のアクティビティの上部にロゴが表示されます(ロゴはメインよりも小さくなります)。しばらくすると、最初のアクティビティが閉じられ、ロゴは共有要素のアクティビティ遷移を使用してアニメートされます。最初のアクティビティのonStopでは終了します(スプラッシュなので、もう必要ありません)。 問題は、2番目のアクティビティで戻るときに、アクティビティが既に非表示になっていても、しばらく(2〜3秒)画面上にロゴが表示されるということです。 は次のようになります。emulator screenshot共有要素アクティビティ遷移。アクティビティが破壊されている間、画面に表示されたままになります。

最初のアクティビティ:

public class MainActivity extends BaseActivity { 

    @BindView(R.id.logo) 
    public ImageView imageView; 

    private boolean mShouldFinish; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     ButterKnife.bind(this); 
     new Handler().postDelayed(new Runnable() { 
      @Override 
      public void run() { 
       startSecondActivity(); 
      } 
     }, 3000); 
    } 

    @Override 
    protected void onStop() { 
     super.onStop(); 
     if(mShouldFinish) { 
      finish(); 
     } 
    } 

    private void startSecondActivity() { 
     Intent intent = new Intent(this, SecondActivity.class); 
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
      ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(this, imageView, "logo"); 
      startActivity(intent, options.toBundle()); 
     } else { 
      startActivity(intent); 
     } 
     mShouldFinish = true; 
    } 
} 

SecondActivity:

public class SecondActivity extends BaseActivity { 

    @Override 
    protected void onCreate(@Nullable Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_second); 
    } 

} 

FirstActivityレイアウト:

<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" 
    tools:context="com.github.guliash.androidexplorer.MainActivity"> 
    <ImageView 
     android:layout_width="200dp" 
     android:layout_height="200dp" 
     android:src="@drawable/ic_android_black_48dp" 
     android:layout_gravity="center" 
     android:transitionName="logo" 
     android:id="@+id/logo" 
     android:scaleType="fitCenter"/> 
</FrameLayout> 

SecondActivityレイアウト:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <ImageView 
     android:layout_width="50dp" 
     android:layout_height="50dp" 
     android:src="@drawable/ic_android_black_48dp" 
     android:transitionName="logo" 
     android:layout_gravity="center_horizontal"/> 
</LinearLayout> 

私は間違っていますか?

全コードはここで見つけることができ github repo

答えて

1

まず、このmShouldFinishのトリックを使用していない、単に呼び出し仕上げ(); 2番目のアクティビティで、onBackPressedをオーバーライドして、finish()を呼び出してみてください。

+0

。しかし、なぜ私はそこで終了する必要がありますか? – Guliash

+0

デフォルトでは、共有要素は元の場所に戻ろうとします(終了遷移)。あなたが元の活動を終えるので、行く場所がありません。 finishを呼び出すと、この遷移は無視されます。 –

+1

私は参照してください。あなたは私がそのようなことについて読むことができるチュートリアルを提案できますか?私は2日間のグーグルでそれについての情報は見つけられませんでした。 – Guliash

-1

私はあなたのコードを編集し、私はそれがOKだったテスト:

SplashActivity

public class Splash extends AppCompatActivity { 



     final int SPLASH_DISPLAY_LENGTH = 1000; 
      public ImageView imageView; 


     public void onCreate(Bundle icicle) { 
      super.onCreate(icicle); 
      setContentView(R.layout.activity_splash); 
      imageView = (ImageView)findViewById(R.id.logo); 


      new Handler().postDelayed(new Runnable(){ 
       @Override 
       public void run() { 

        startSecondActivity(); 
       } 
      }, SPLASH_DISPLAY_LENGTH); 
     } 

    private void startSecondActivity() { 
     Intent intent = new Intent(this, MainActivity.class); 
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
      ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(this, imageView, "logo"); 
      startActivity(intent, options.toBundle()); 
      Splash.this.finish(); 
     } else { 
      startActivity(intent); 
      Splash.this.finish(); 
     } 

    } 

} 

MainActivity

public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
    } 
} 

そして、あなたのレイアウトは次のようになります。

activity_splash.xml

<?xml version="1.0" encoding="utf-8"?> 
<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="ellip.ir.myapplication.Splash"> 

    <ImageView 
     android:layout_width="200dp" 
     android:layout_height="200dp" 
     android:src="@drawable/logo" 
     android:layout_gravity="center" 
     android:transitionName="logo" 
     android:id="@+id/logo" 
     android:scaleType="fitCenter"/> 

</RelativeLayout> 

activity_main.xml

<?xml version="1.0" encoding="utf-8"?> 
<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="ellip.ir.myapplication.MainActivity"> 

    <ImageView 
     android:layout_width="50dp" 
     android:layout_height="50dp" 
     android:src="@drawable/logo" 
     android:transitionName="logo" 
     android:layout_gravity="center_horizontal"/> 
</RelativeLayout> 

マニフェスト:助け

<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:supportsRtl="true" 
    android:theme="@style/AppTheme"> 
    <activity android:name=".MainActivity"> 

    </activity> 
    <activity android:name=".Splash"> 

     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
</application> 
関連する問題