我正在尝试在我的应用中实现活动转换。我遇到了一个很棒的here。但它只与android jellybean +兼容。上面的链接重定向到youtube,其中Nick Butcher在视图中显示活动缩放过渡。
我想在姜饼(API 10)+上使用它。我怎样才能做到这一点?我想到的一个想法是在屏幕上显示该视图的位置,将其传递给即将到来的活动,然后要求即将进行的活动从该位置缩放或变大。我不知道这是否可能。非常感谢任何想法或解决方案。
谢谢!
答案 0 :(得分:1)
您可以使用此动画,并根据您的图像位置和屏幕尺寸更改XY,并在动画结束时开始您的活动,这是一个技巧,希望它有所帮助:
private void centerAndZoomView( View view)
{
RelativeLayout root = (RelativeLayout) findViewById( R.id.rootLayout );
DisplayMetrics dm = new DisplayMetrics();
this.getWindowManager().getDefaultDisplay().getMetrics( dm );
int statusBarOffset = dm.heightPixels - root.getMeasuredHeight();
int originalPos[] = new int[2];
view.getLocationOnScreen( originalPos );
int xDest = dm.widthPixels/2;
xDest -= (view.getMeasuredWidth()/2);
int yDest = dm.heightPixels/2 - (view.getMeasuredHeight()/2) - statusBarOffset;
TranslateAnimation anim = new TranslateAnimation( 0, xDest - originalPos[0] , 0, yDest - originalPos[1] );
Animation scale
= new ScaleAnimation(1.0f,root.getMeasuredWidth()/view.getMeasuredWidth() , 1.0f, root.getMeasuredHeight()/view.getMeasuredHeight(),
Animation.RELATIVE_TO_SELF, 0.5f,
Animation.RELATIVE_TO_SELF, 0.5f);
scale.setInterpolator(new AccelerateInterpolator());
AnimationSet set = new AnimationSet(false);
set.addAnimation(scale);
set.addAnimation(anim);
set.setFillAfter(true);
set.setDuration(10000);
//set.start();
view.startAnimation(set);
set.setAnimationListener(new AnimationListener()
{
@Override
public void onAnimationStart(Animation animation){}
@Override
public void onAnimationRepeat(Animation animation){}
@Override
public void onAnimationEnd(Animation animation)
{
Intent intent = new Intent(getApplication(), NextActivity.class);
startActivity(intent);
Toast.makeText(getApplicationContext(), "END OF ANIMATION", Toast.LENGTH_LONG).show();
}
});
}
我根据屏幕宽度和高度组合了TranslateAnimation和ScaleAnimation,你可以传递任何View(Button,ImageView,LinarLayout ......)作为参数,你的根布局必须有&# 34; rootLayout"标识。
答案 1 :(得分:0)
您可以使用Activity.overridePendingTransition()
方法并指定自己的动画。这已经从API级别5开始提供了。ActivityOptions
Nick在视频中使用的只是一种更新的方式来完成相同的事情,并在API级别16中引入。请注意,为了支持较旧的API,您需要我必须使用Animation
资源(补间动画)而不是Animator
类型。您可以进行翻译,缩放和缩放(缩放)类型动画。