我有两项活动。第一个是闪屏,中间有一个标志。第二个活动在顶部有徽标(徽标小于主要徽标)。一段时间后,第一个活动关闭,徽标使用共享元素活动转换进行动画处理。在第一个活动的onStop中,我完成了它(因为它是一个引人注目的,我不再需要它了)。 问题是,当我按下第二个活动时,即使活动已经隐藏,徽标也会在屏幕上停留一段时间(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
答案 0 :(得分:4)
首先,不要使用这个mShouldFinish技巧,只需调用finish(); 其次,在你的第二个活动中尝试覆盖onBackPressed并在里面调用finish()。
答案 1 :(得分:-1)
我编辑了你的代码,我测试了它是好的:
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>