我想实现从左侧滑动效果,权当我从一个活动移动到另一个。 对于我使用下面的代码,但我没有得到任何结果。 请指正。
在java中这两个文件:
super.onCreate(savedInstanceState);
overridePendingTransition(R.anim.fadein, R.anim.fadeout);
setContentView(R.layout.main);
两个文件在res /阿尼姆目录:
fadein.xml
<?xml version="1.0" encoding="utf-8"?>
<alpha
xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="5000"
android:fromAlpha="0.0"
android:interpolator="@android:anim/slide_out_right"
android:toAlpha="1.0" >
</alpha>
fadeout.xml
<?xml version="1.0" encoding="utf-8"?>
<alpha
xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="5000"
android:fromAlpha="0.0"
android:interpolator="@android:anim/slide_in_left"
android:toAlpha="1.0" >
</alpha>
Answer 1:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.splashscreen);
new Handler().postDelayed(new Runnable() {
public void run() {
/* Create an intent that will start the main activity. */
Intent mainIntent = new Intent(SplashScreen.this,
ConnectedActivity.class);
mainIntent.putExtra("id", "1");
//SplashScreen.this.startActivity(mainIntent);
startActivity(mainIntent);
/* Finish splash activity so user cant go back to it. */
SplashScreen.this.finish();
/* Apply our splash exit (fade out) and main
entry (fade in) animation transitions. */
overridePendingTransition(R.anim.mainfadein,R.anim.splashfadeout);
}
}, SPLASH_DISPLAY_TIME);
}
Answer 2:
在res /动画文件夹中添加这两种文件。
slide_in.xml
<?xml version="1.0" encoding="utf-8"?>
<translate
xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="@android:integer/config_longAnimTime"
android:fromXDelta="100%p"
android:toXDelta="0%p"/>
slide_out.xml
<?xml version="1.0" encoding="utf-8"?>
<translate
xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="@android:integer/config_longAnimTime"
android:fromXDelta="0%p"
android:toXDelta="-100%p"/>
谱写的onCreate下面的代码(下一个活动的)方法,你经过的意图。
overridePendingTransition(R.anim.slide_in, R.anim.slide_out);
Answer 3:
您可以覆盖默认的活动动画比overridePendingTransition有更好的表现。 我用这个解决方案,为每一个Android版本。 只要复制粘贴4个文件和下面添加一个4线风格:
创建一个“CustomActivityAnimation”和“windowAnimationStyle”添加到您的基本主题。
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorPrimary</item>
<item name="android:windowAnimationStyle">@style/CustomActivityAnimation</item>
</style>
<style name="CustomActivityAnimation" parent="@android:style/Animation.Activity">
<item name="android:activityOpenEnterAnimation">@anim/slide_in_right</item>
<item name="android:activityOpenExitAnimation">@anim/slide_out_left</item>
<item name="android:activityCloseEnterAnimation">@anim/slide_in_left</item>
<item name="android:activityCloseExitAnimation">@anim/slide_out_right</item>
</style>
然后创建res文件夹下的动画文件夹,然后创建这四个动画文件到文件夹的动画:
slide_in_right.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="100%p" android:toXDelta="0"
android:duration="@android:integer/config_mediumAnimTime"/>
</set>
slide_out_left.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="0" android:toXDelta="-100%p"
android:duration="@android:integer/config_mediumAnimTime"/>
</set>
slide_in_left.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="-100%p" android:toXDelta="0"
android:duration="@android:integer/config_mediumAnimTime"/>
</set>
slide_out_right.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="0" android:toXDelta="100%p"
android:duration="@android:integer/config_mediumAnimTime"/>
</set>
如果您遇到任何问题,那么你可以下载我从GitHub样本项目 。
谢谢
Answer 4:
幻灯片上/下与奥飞动漫有几注
slide_up.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="@integer/activity_transition_time"
>
<translate
android:fromYDelta="100%p"
android:toYDelta="0"/>
<alpha
android:fromAlpha="0.5"
android:toAlpha="1"/>
</set>
slide_down.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="@integer/activity_transition_time"
>
<translate
android:fromYDelta="0"
android:toYDelta="100%p"/>
<alpha
android:fromAlpha="1"
android:toAlpha="0.5"/>
</set>
no_animation.xml
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="@integer/activity_transition_time"
android:fromYDelta="0"
android:toYDelta="0"/>
第一项活动
startActivity(new Intent(this, SecondActivity.class));
overridePendingTransition(R.anim.slide_up, R.anim.no_animation); // remember to put it after startActivity, if you put it to above, animation will not working
// document say if we don't want animation we can put 0. However, if we put 0 instead of R.anim.no_animation, the exist activity will become black when animate
第二项活动
finish();
overridePendingTransition(R.anim.no_animation, R.anim.slide_down);
完成
更多
我尽量让像iOS的动画幻灯片动画时存在的视图模型(这样https://www.youtube.com/watch?v=deZobvh2064 ),但失败了。
纵观目前的iOS动画,你会看到:从阿尔法(约50%),底部的动画,然后它去非常快,然后慢,动画时间约为> 500毫秒(我用修剪视频工具进行计算动画时间https://开头www.kapwing.com/trim-video所以不能确切地100%)
然后我尝试应用到Android。
为了使阿尔法我用<alpha>
和成功。
为了使动画启动慢我使用更快android:interpolator="a decelerate interpolator"
,但它几乎失败。
有3个默认decelerate interpolator
在Android中
@android:interpolator/decelerate_quad
- >因子1 =
@android:interpolator/decelerate_cubic
- >因子= 1.5
@android:interpolator/decelerate_quint
_>因子= 2.5
(较高因子<=>动画开始从开始在端更更快和更慢)
这里是一个很好的教程http://cogitolearning.co.uk/2013/10/android-animations-tutorial-5-more-on-interpolators/的理解
我试过3上面我无法实现像iOS版,动画无法启动更快喜欢的iOS。 然后,我创建一个自定义decelerateInterpolator因素室内用= 3样
<?xml version="1.0" encoding="utf-8"?>
<decelerateInterpolator xmlns:android="http://schemas.android.com/apk/res/android"
android:factor="3" />
我增加从持续时间500 -> 750
。 它运作良好(非常相似于iOS)。 但是,它只能在一些设备运作良好,在一些设备中的动画是相当缓慢。 后来,我知道,动画可以在不同设备上的不同(例如:一些设备会更快一些设备会更慢),所以我不能让它在所有的Android设备类似的动画。 因此,我不使用interpolator
。 我不知道如果我的测试是完全100%或没有,但我希望这方面的经验帮助
Answer 5:
你可以使用overridePendingTransition
在startActivity
代替onCreate
。 至少,这对我的作品!
看到一个完整的例子在这里 。 它包括(反向)动画onBackPressed,所以退回到以前的活动,同时! 在您的具体的例子(淡入和退房手续),可能是不必要的,但。
Answer 6:
滑盖动画可以通过调用overridePendingTransition并通过动画资源进入和退出活动适用于活动的转变。
幻灯片动画可以直接滑动,向左滑动,向上滑动和向下滑动。
向上滑动
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/linear_interpolator">
<scale
android:duration="800"
android:fromXScale="1.0"
android:fromYScale="1.0"
android:toXScale="1.0"
android:toYScale="0.0" />
</set>
滑下
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/linear_interpolator">
<scale
android:duration="800"
android:fromXScale="1.0"
android:fromYScale="0.0"
android:toXScale="1.0"
android:toYScale="1.0" />
</set>
overridePendingTransition(R.anim.slide_down,R.anim.slide_up);
请参见活动过渡动画的例子更多的活动转变例子。
Answer 7:
科特林例如:
private val SPLASH_DELAY: Long = 1000
internal val mRunnable: Runnable = Runnable {
if (!isFinishing) {
val intent = Intent(applicationContext, HomeActivity::class.java)
startActivity(intent)
overridePendingTransition(R.anim.slide_in, R.anim.slide_out);
finish()
}
}
private fun navigateToHomeScreen() {
//Initialize the Handler
mDelayHandler = Handler()
//Navigate with delay
mDelayHandler!!.postDelayed(mRunnable, SPLASH_DELAY)
}
public override fun onDestroy() {
if (mDelayHandler != null) {
mDelayHandler!!.removeCallbacks(mRunnable)
}
super.onDestroy()
}
放动画文件夹中的动画:
slide_in.xml
<?xml version="1.0" encoding="utf-8"?>
<translate
xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="@android:integer/config_longAnimTime"
android:fromXDelta="100%p"
android:toXDelta="0%p">
</translate>
slide_out.xml
<?xml version="1.0" encoding="utf-8"?>
<translate
xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="@android:integer/config_longAnimTime"
android:fromXDelta="0%p"
android:toXDelta="-100%p">
</translate>
用法
navigateToHomeScreen();
Answer 8:
这里是你幻灯片动画。
比方说,你有两个活动。
- MovieDetailActivity
- AllCastActivity
并点击按钮,出现这种情况。
您可以在3个简单步骤实现这一目标
1)启用内容转换
转到您的style.xml
并添加此行来启用内容转换。
<item name="android:windowContentTransitions">true</item>
2)写默认进入和退出过渡为您AllCastActivity
public void setAnimation()
{
if(Build.VERSION.SDK_INT>20) {
Slide slide = new Slide();
slide.setSlideEdge(Gravity.LEFT);
slide.setDuration(400);
slide.setInterpolator(new AccelerateDecelerateInterpolator());
getWindow().setExitTransition(slide);
getWindow().setEnterTransition(slide);
}
}
3)启动活动意图
在你写这个方法MovieDetailActivity
开始AllCastActivity
public void startActivity(){
Intent i = new Intent(FirstActivity.this, SecondActivity.class);
i.putStringArrayListExtra(MOVIE_LIST, movie.getImages());
if(Build.VERSION.SDK_INT>20)
{
ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(BlankActivity.this);
startActivity(i,options.toBundle());
}
else {
startActivity(i);
}
}
最重要的!
把你的setAnimation()
方法之前setContentView()
方法,否则动画将无法正常工作。
所以,你的AllCastActivity.java
应该是这样的
class AllCastActivity extends AppcompatActivity {
@Override
protected void onCreate(Bundle savedInstaceState)
{
super.onCreate(savedInstaceState);
setAnimation();
setContentView(R.layout.all_cast_activity);
.......
}
private void setAnimation(){
if(Build.VERSION.SDK_INT>20) {
Slide slide = new Slide();
slide.setSlideEdge(Gravity.LEFT);
..........
}
}
文章来源: How to apply slide animation between two activities in Android?