2016-05-22 12 views
3

Ich habe zwei Aktivitäten. Der erste ist ein Begrüßungsbildschirm, in der Mitte befindet sich ein Logo. Die zweite Aktivität hat das Logo oben (das Logo ist kleiner als das Haupt). Nach einiger Zeit wird die erste Aktivität geschlossen, und das Logo wird durch den Übergang von gemeinsam genutzten Elementaktivitäten animiert. In der ersten Aktivität onStop beende ich es (weil es ein Splash ist, und ich brauche es nicht mehr). Das Problem ist, dass, wenn ich in der zweiten Aktivität zurück drücke, das Logo für einige Zeit (2-3 Sekunden) auf dem Bildschirm steht, selbst wenn die Aktivität bereits ausgeblendet ist. sieht wie folgt aus: emulator screenshotAktivitätsübergang für freigegebene Elemente. View bleibt auf dem Bildschirm, während die Aktivität zerstört wird

Erste Aktivität:

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

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

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

Was mache ich falsch?

Voll Code kann hier github repo

Antwort

1

Zuerst verwenden Sie nicht dieses mShouldFinish Trick gefunden werden, rufen Sie einfach finish(); Zweitens, in Ihrer zweiten Aktivität versuchen OnBackPressed zu überschreiben und finish() innerhalb zu nennen.

+0

Das half. Aber warum sollte ich dort beenden? – Guliash

+0

Standardmäßig versucht das gemeinsam genutzte Element, zu seinem ursprünglichen Platz zurückzukehren (Übergang beenden). Weil Sie seine ursprüngliche Aktivität beenden, hat es keinen Platz zu gehen. Der Aufrufende beendet diesen Übergang. –

+1

Ich verstehe. Könntest du ein Tutorial vorschlagen, in dem ich über solche Dinge lesen kann? Ich habe zwei Tage gegoogelt und keine Informationen darüber gefunden. – Guliash

-1

ich Ihren Code bearbeitet und getestet habe ich es war 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); 
    } 
} 

Und Ihre Layouts sein wird:

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> 

Manifest:

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