Articles of animation

用DrawerLayout打开Activity时如何消除延迟?

我有一个DrawerLayout的活动,但每当它打开时有一个像屏幕是白色,然后我的屏幕画的分秒的延迟。 转换完成后会发生这种情况。 所以它看起来像屏幕animation转换跳跃。 绑定与ButterKnife的意见后,我试图把这个在我的OnCreate,但它什么都没做。 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { postponeEnterTransition(); drawerLayout.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { @TargetApi(Build.VERSION_CODES.LOLLIPOP) public boolean onPreDraw() { drawerLayout.getViewTreeObserver().removeOnPreDrawListener(this); startPostponedEnterTransition(); return true; } }); } 是的,我正在优化它的棒棒糖,并为pre-Lollipop设备我jsut使用overridePendingTransitions它工作正常。 我的问题只在棒棒糖设备上。 顺便说一句,我的进入和退出转换都是在xml中定义的fade_in_out和指定的styles <style name="AppTheme" parent="Theme.AppCompat.Light"> <item name="colorAccent">@color/pink</item> <item name="windowActionBar">false</item> <item name="windowNoTitle">true</item> <item name="android:windowDrawsSystemBarBackgrounds">true</item> <item name="android:windowActivityTransitions">true</item> <item name="android:windowContentTransitions">true</item> <!– specify enter and exit transitions –> <!– options are: explode, slide, […]

如何在android中同时启动两个animation?

我有两个线性布局,我想在这两个布局上同时执行两个不同的animation。 现在它按顺序工作。 即在完成一个开始之后。 这是我的代码。 Animation inFromRight = new TranslateAnimation( Animation.RELATIVE_TO_PARENT, +0.0f, Animation.RELATIVE_TO_PARENT, 0.0f, Animation.RELATIVE_TO_PARENT, 0.0f, Animation.RELATIVE_TO_PARENT, 0.0f); inFromRight.setDuration(500); inFromRight.setInterpolator(new AccelerateInterpolator()); Animation outtoLeft = new TranslateAnimation( Animation.RELATIVE_TO_PARENT, 0.0f, Animation.RELATIVE_TO_PARENT, -1.0f, Animation.RELATIVE_TO_PARENT, 0.0f, Animation.RELATIVE_TO_PARENT, 0.0f); outtoLeft.setDuration(500); outtoLeft.setInterpolator(new AccelerateInterpolator()); @Override public void onClick(View v) { switch (v.getId()) { case R.id.menu: mainLayout.startAnimation(outtoLeft); sideBar.startAnimation(inFromRight); break; } } outtoLeft.setAnimationListener(new AnimationListener() { […]

Android的小工具:RemoteViews上的animation?

我没有太多的成功将animation应用到RemoteViews视图。 为了简单起见,假设我有一个带有ImageView和Button的小部件。 点击button时,我想添加一个简单的animation到ImageView(例如一个旋转)。 由于我不能像在一个Activity使用findViewById()来获取引用,并且RemoteViews没有animation的setter,所以我不知道该怎么做。 我正在考虑用一个新的布局replacewidget的RemoteViews,类似于原来的,但是这个已经加载了animation。 我可以这样做吗? 是否可以在布局中embeddedanimation? 对于WidgetProvider,代码会是这样的: Intent intent = new Intent(context, RotateService.class); PendingIntent pendingIntent = PendingIntent.getService(context, 0, intent, 0); RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.a_widget); views.setOnClickPendingIntent(R.id.a_button, pendingIntent); appWidgetManager.updateAppWidget(appWidgetId, views); 然后在RotateService中: ComponentName myWidget = new ComponentName(this, MyWidget.class); AppWidgetManager manager = AppWidgetManager.getInstance(this); RemoteViews newViews = buildNewRemoteViewsWithAnimation(); manager.updateAppWidget(myWidget, newViews); 任何其他build议?

如何在android中实现这种折叠效果?

这是对ios的影响就像纸折叠对于iOS的效果: https : //github.com/honcheng/PaperFold-for-iOS

Android:animation自定义视图

编辑:答案总结 我发现了5种在Android中animation的方法: 使用“ 属性animation” Viewanimation的属性 ,以平滑地更改rotation , alpha , scale等。 帧animation ( AnimationDrawable ):快速更改图片,使其看起来animation 使用vector ( VectorDrawable )devise图像,并使用AnimatedVectorDrawable随着时间的推移对它们进行编辑来为它们设置 animation 。 覆盖 View上的onDraw() ,并通过在canvas上绘画来执行自定义绘图 。 使用Lottie ,从After Effects中复制animation。 LottieFiles提供了许多animation。 但是,Android也提供了一些内置工具 ,例如Scenes (可以让您在多个共享Views布局之间进行animation转换), Shared elements (可以让您将View从一个Activity传递到另一个Activity )等等 API 21中添加了许多(如果不是全部)这些function,请点击这里获取更多信息。 这里有一些有趣的文章/animation博客: Google制作的网站上的一个子类别叫做material.io : 创意定制 。 我们如何devise一个漂亮的animation :用animationvector来训练animation。 Android转换的工作原理 animation到无限 :蓝牙animation与vector Android中的框架animation :通过图像旋转填充心脏。 最后,一些有趣的工具: Mac工具在GitHub上录制Android屏幕。 video到GIF转换器在线 。 注意 我知道Android提供了诸如scale […]

使用dynamic位图设置在Android上实现KenBurns效果

背景 我正在操作栏上执行“ KenBurns效果 ”(演示这里 ),就像这个库的示例(除了移动的图标,我自己做的那样)。 事实上,我甚至在很久以前就问过这个问题,在这个问题上,我甚至不知道它的名字。 我确信我find了一个解决scheme,但它有一些问题。 另外,由于我有时会显示设备上的图像,有些图像甚至需要旋转,所以我使用了一个可旋转的图像(如图所示)。 问题 当前的实现不能处理dynamic给出的多个位图(例如,来自Internet),甚至不会查看input图像的大小。 相反,它只是以随机的方式进行缩放和翻译,很多时候它可以放大/缩小,并且可以显示空白空间。 代码 以下是与问题相关的代码: private float pickScale() { return MIN_SCALE_FACTOR + this.random.nextFloat() * (MAX_SCALE_FACTOR – MIN_SCALE_FACTOR); } private float pickTranslation(final int value, final float ratio) { return value * (ratio – 1.0f) * (this.random.nextFloat() – 0.5f); } public void animate(final ImageView view) { final float fromScale […]

如何在设置视图的alpha之前创build1秒的延迟?

在我的应用程序中,我将在一个animation之后设置alpha。 像: hideMenu = AnimationUtils.loadAnimation( getApplication(), R.anim.menu_layout_hide); menuLayout.startAnimation(hideMenu); menuLayout.setVisibility(View.GONE); 但是我想在Alpha设置视图之前设置1秒的延迟。 因为我无法看到该布局的animation。 那么怎么样呢? 谢谢。

如何实现平滑的展开/折叠animation

我指的是在这里find的展开/折叠animation代码。 Android:展开/折叠animation 虽然有用,但它不能很好地完成工作。 animation不平滑。 我在代码中做了一些日志logging。 public static void expand(final View v) { v.measure(MeasureSpec.makeMeasureSpec(((View)v.getParent()).getWidth(), MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(1024, MeasureSpec.AT_MOST)); final int targtetHeight = v.getMeasuredHeight(); v.getLayoutParams().height = 0; v.setVisibility(View.VISIBLE); Animation a = new Animation() { @Override protected void applyTransformation(float interpolatedTime, Transformation t) { v.getLayoutParams().height = interpolatedTime == 1 ? LayoutParams.WRAP_CONTENT : (int)(targtetHeight * interpolatedTime); Log.i("CHEOK", "E v.getLayoutParams().height = " […]

将setDisplayHomeAsUpEnabled中的抽屉图标变成箭头?

我使用setDisplayHomeAsUpEnabled为了显示箭头,而不是抽屉“汉堡”图标,但它没有得到animation或任何东西。 相反,它显示了即时绘制的箭头。 主屏幕:( 专辑1) 当你点击一个电影:( 专辑2) 问题是,当我滑动抽屉时,图标会使animation变得很好,这让我觉得也许我不应该为此使用setDisplayHomeAsUpEnabled 🙁 专辑3) 专辑: http : //imgur.com/a/LkXbh 这是我的抽屉切换代码: Toolbar toolbar = (Toolbar) findViewById(R.id.my_awesome_toolbar); setSupportActionBar(toolbar); drawerAdapter = new DrawerAdapter(this, App.getNavItems(), getSupportFragmentManager()); drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); drawerList = (ExpandableListView) findViewById(R.id.left_drawer); // Set onGroupClick and onChildClick drawerAdapter.setClickEvents(MainActivity.this, drawerLayout, drawerList); drawerList.setAdapter(drawerAdapter); ActionBarDrawerToggle toolbarDrawerToggle = new ActionBarDrawerToggle( this, drawerLayout, toolbar, R.string.drawer_open, R.string.drawer_close ) { […]

replace碎片具有错误的高程值

你好,再次堆栈溢出。 我有另一个片段问题。 (我使用android.app.Fragment不支持碎片) 我试图replace一个片段。 但是这不像使用那样简单: fragmentTransaction .replace(containerId, newFragment) .addToBackStack("unique tag") .commit() 为什么不? 好的问题朋友,因为我的newFragment有一个过渡animation。 animation在哪里定义? 另一个很好的问题,它定义在片段onCreateAnimator() 为什么在那里定义? 为什么可以find一个长的答案: 嵌套片段转换不正确 。 现在你需要相信这是我的项目需要完成的事情。 什么是animation在做什么? 从屏幕边缘到其中心的简单滚动,完全覆盖原始片段。 请记住,在这种情况下,旧的片段只是坐在原地。 它有一个不动的animation效果。 问题是什么? 问题是newFragment的高程(或z?)值比旧的高。 所以过渡是不能被观察到的,因为旧的片段位于新的片段之上。 在到达animation持续时间结束时,您会看到新的片段在旧的片段之上闪烁。 我希望这个新片段能够在animation开始的时候覆盖旧片断。 为什么不使用添加? 这似乎造成了更多的问题,因为我有很多我想要交换和切换的片段。 使用add似乎会在下一次使用replace时触发它们的退出animation,即使它前面有1 … n个碎片。 他们也不会停下来。 为什么不设置高程? 因为我支持没有海拔属性的api 19。 为什么不使用ViewCompat.setElevation()为api 19? 我尝试过,并有相同的失败的结果。 有没有人find解决这个问题的方法?