假设我有以下层次结构:
存在以下用例:
需要以下过渡行为:
用例1 3:我希望旧活动从左侧滑出,新活动从右侧滑入
用例2:我希望旧活动滑出到右侧,新活动滑入到左侧
我尝试了很多方法来使用overridePendingTranplace
来实现这一点,但没有一个组合可以正常工作...我被以下内容卡住了:
public class BaseActivity extends Activity
{
@Override
protected void onPause()
{
adjustWindowAnimation(this, false);
super.onPause();
}
@Override
protected void onResume()
{
adjustWindowAnimation(this, true);
super.onResume();
}
protected void adjustWindowAnimation(Activity parent, boolean start)
{
if (start)
parent.overridePendingTransition(R.anim.slide_from_right_in, R.anim.slide_to_left_out);
else
parent.overridePendingTransition(R.anim.slide_from_left_in, R.anim.slide_to_right_out);
}
// @Override
// protected void onCreate(Bundle savedInstanceState)
// {
// adjustWindowAnimation(this, true);
// super.onCreate(savedInstanceState);
// }
// @Override
// protected void onRestoreInstanceState(Bundle savedInstanceState)
// {
// adjustWindowAnimation(this, true);
// super.onRestoreInstanceState(savedInstanceState);
// }
// @Override
// protected void onStart()
// {
// super.onStart();
// adjustWindowAnimation(this, true);
// }
// @Override
// protected void onNewIntent(Intent intent)
// {
// adjustWindowAnimation(this, true);
// super.onNewIntent(intent);
// }
// @Override
// protected void onStop()
// {
// adjustWindowAnimation(this, false);
// super.onStop();
// }
// @Override
// public void finish()
// {
// adjustWindowAnimation(this, false);
// super.finish();
// }
// @Override
// protected void onDestroy()
// {
// Crouton.clearCroutonsForActivity(this);
// super.onDestroy();
// }
// @Override
// public void onBackPressed()
// {
// adjustWindowAnimation(this, false);
// super.onBackPressed();
// }
}
动画(这些应该正常工作):
SlideFromLeftIn:
<set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/accelerate_interpolator">
<translate android:fromXDelta="-100%" android:toXDelta="0"
android:duration="@android:integer/config_shortAnimTime" />
</set>
SlideFromRightIn:
<set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/accelerate_interpolator">
<translate android:fromXDelta="100%" android:toXDelta="0"
android:duration="@android:integer/config_shortAnimTime" />
</set>
滑出:
<set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/accelerate_interpolator">
<translate android:fromXDelta="0%" android:toXDelta="-100%"
android:duration="@android:integer/config_shortAnimTime" />
</set>
幻灯片右对齐:
<set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/accelerate_interpolator">
<translate android:fromXDelta="0" android:toXDelta="100%"
android:duration="@android:integer/config_shortAnimTime" />
</set>
为了达到这种行为,你需要知道暂停和恢复的原因。比如,如果它的另一个活动将被呈现,那么应用程序将在onPause()
中播放一个动画,但如果它没有(所以这是任何其他原因),那么您将播放另一个动画。同样在onResume()中-如果是某个活动开始了,现在它已经完成了,这就是为什么触发了onResume(),那么你播放一个相应的动画,但如果完成活动没有触发onResume(),那么你播放另一个动画<我做了以下类似的事情:
public class MainMenuActivity extends Activity{
...
protected boolean isGoingToAlarmActivity;
protected boolean isGoingToSettingsActivity;
@Override
protected void onPause() {
// for animation choose
if (isGoingToAlarmActivity){
isGoingToAlarmActivity = false;
overridePendingTransition(R.anim.slide_in_left, R.anim.slide_out_right);
}
else if (isGoingToSettingsActivity){
isGoingToSettingsActivity = false;
overridePendingTransition(R.anim.slide_in_right, R.anim.slide_out_left);
}
super.onPause();
}
public void onAlarmButtonClick (View button){
isGoingToAlarmActivity = true;
startActivity(new Intent(this, AlarmActivity.class));
}
public void onSettingsButtonClick (View button){
isGoingToSettingsActivity = true;
startActivity(new Intent(this, SettingsActivity.class));
}
...
}
项目菜单中只有3个活动:报警和设置。因此,它进入“从右到左”的动画设置,并在返回菜单时反转,AlrmActivity反之亦然。在AlarmActivity中:
@Override
protected void onPause() {
// for animation choose
if (isFinishing())
overridePendingTransition(R.anim.slide_in_right, R.anim.slide_out_left);
super.onPause();
}
并在设置活动中:
@Override
protected void onPause() {
// for animation choose
if (isFinishing())
overridePendingTransition(R.anim.slide_in_left, R.anim.slide_out_right);
super.onPause();
}
注意:活动的isFinishing()方法表示活动就像用户点击后退按钮一样结束(可能还有其他原因,但在大多数情况下是这样)。
我有两个活动A和B。A启动活动B。在活动B中,我在按钮单击处理程序中调用setResult(RESULT_OK,intent),而不调用finish()-这是理想的行为。 旋转B并按back后,A的onActivityResult接收resultCode的RESULT_Cancelled,而不是RESULT_ OK。 我知道这是因为活动B在旋转时被破坏了。确保从B返回正确的结果代码的常见做法是什么
在实现并尝试将动画应用于箭头文本视图后,当单击箭头时,动画显示异常行为。如何修复动画并获得与预期动画图像相似的结果? 预期动画 当前动画 回收视图项目 MyRecyclerAdapter。JAVA 苏拉布的建议
本文向大家介绍在C ++中正确使用堆栈和堆?,包括了在C ++中正确使用堆栈和堆?的使用技巧和注意事项,需要的朋友参考一下 堆栈-函数内部声明的所有变量将占用堆栈中的内存。因此,函数内的任何局部变量都位于堆栈中。 堆-这是程序的未使用内存,可用于在程序运行时动态分配内存。因此,如果我们希望某些东西的寿命比声明它的函数的寿命更长,则必须在堆上分配它。 示例 堆内存中的主要问题是碎片,而堆栈中更容易出
好吧,所以我有点困惑该怎么处理这个。因此,我有了主活动,从那里可以启动一个活动到DegreePlan活动,从那里可以启动另一个活动到EditDegreeplan。我已经将EditDegreeplan设置为在Android清单中没有历史记录。问题是在他们保存EditDegreeplan后,它会启动一个活动到Degreeplan。因此,如果用户按下后退键,他们必须按两次才能再次进入主活动。我想摆脱它,
当我在我的个人资料活动中点击注销按钮时,我想把用户带到登录页面,在那里他需要使用新的凭证。 所以我用了这个代码: 在。 但问题是,当我点击登录活动上的设备返回按钮时,它会把我带到Profile活动。我期待的应用程序应该关闭时,我按下设备返回按钮上的登录活动。 我做错了什么? 我还在清单中为我的登录活动添加了 非常感谢。
问题内容: 有什么规范的方法可以从堆栈中删除添加的中间件?似乎应该可以直接修改数组,但是我想知道是否有一个我应该首先考虑的文档化方法。 问题答案: 实际上来自Connect(不是Express),它真正要做的就是将中间件功能推送到应用程序的。 因此,您应该很好地将函数拼接出数组。 但是,请记住,周围没有文档,也没有删除中间件的功能。您冒着将来版本的Connect进行更改与代码不兼容的风险。