Articles of animation

你怎么能使用像Glide,毕加索等图像加载器的animation微调加载占位符?

我试图插入一个通用的加载圈作为占位符,而图像加载像Glide或毕加索的图像加载器库。 我不能为我的生活找出你应该如何从XML创build一个旋转的drawable。 我尝试使用XML中的AnimationDrawable创build一个animation列表,但它甚至不显示(甚至不是静态的)。 我只想要一个简单的圆圈,它自己旋转,所有的都在xml drawable中,所以我可以将id作为占位符传递给我的图像加载器。 如果这是不可能的,请现在告诉我,所以我可以节省大量的研究:) 编辑:一些代码,使其更清晰,我需要一个旋转drawable这个Glide命令: Glide.with(context) .load(imageUrl) .into(imageView) .placeHolder(R.drawable.spinning_loading_placeholder); 当图像被加载时,一个可绘制的占位符将被显示在图像稍后的地方。 我需要一个可以旋转的drawable。

用点击或滑动手势(Android)扩展/折叠CardView?

我正在寻找一个解决scheme,这将允许我扩大cardview看到更多的信息,然后轻松地将其折叠。 Google Keep有这样的卡片的例子。 任何人都知道他们是怎么做到的 我会创build我的cardview的两个版本(一个折叠和一个扩展),然后使用animation类加上手势方法在两个视图之间转换? 我正在使用Recyclerview来保存我的卡片视图。 我发现,如果它是相关的: http : //developer.android.com/training/animation/layout.html

禁用云服务中testing的animation(以编程方式?)

目前我们可以看到两个主要的云testing服务: Amazon AWS设备场 Google云端testing实验室 不支持espresso开发人员build议的停用设备animation: https : //google.github.io/android-testing-support-library/docs/espresso/setup/index.html#setup-your-test-environment 亚马逊实际上禁用了窗口animation,但这还不够,因为片状的最大来源是animation师。 谷歌承认这个问题,但修复它需要一些时间。 同时,如何禁用Animatoranimation而无需访问设备?

LinearGradient中心animation

我想要对线性渐变的中心进行animation处理,因此开始时整个drawable是color1,最后整个drawable是color2,渐变的中心从左到右移动。 GradientDrawable gd = new GradientDrawable( GradientDrawable.Orientation.LEFT_RIGHT, new int[] {color1, color2}); gd.setCornerRadius(0f); gd.setGradientCenter(x, 0); view.setBackgroundDrawable(gd); 问题是setGradientCenter没有任何区别。 根据这个答案https://stackoverflow.com/a/14383974/1395697有setGradientCenter()的问题,但在这个答案的解决scheme不适合我,因为我改变了onTouch()中的渐变,当用户滑动他的手指在视图上,所以它需要非常快。 有没有办法做到这一点? 我想做这样的事情(所有触摸的东西都很好,但不是animation的渐变):

animationsetSet setStartDelay调用onAnimationStart

我正在使用android的KitKat,这似乎是不能按预期工作。 我有一个animation集,它应该延迟一段时间后才能启动,但是当animation实际启动时(延迟之后),我想做一些动作。 看起来,AnimatorSet在调用start()之后立即在侦听器上调用onAnimationStarted。 下面的示例代码: AnimatorSet set = new AnimatorSet(); set.playTogether( ObjectAnimator.ofFloat(obj, "x", 10), ObjectAnimator.ofFloat(obj, "y", 10)); set.setStartDelay(5000); set.setDuration(1000) set.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationStart(Animator animation) { // do sth } }); set.start(); 在这种情况下,侦听器立即被调用,而不是被延迟。 为了解决这个问题,我检查了如果将侦听器添加到传入playTogether的animation器给出预期的结果,它实际上是这样做的。 这是一个错误?

RecyclerView项目和CollapsingToolbar之间的共享元素animation在相同的活动

在我的应用程序中,我有一个通过RecyclerView适配器显示的项目列表。 如果我点击一个项目,在同一个Activity中启动一个新的Fragment 。 我的项目和我的活动外观(简化)的布局是这样的: 活动布局: <android.support.design.widget.CoordinatorLayout> <android.support.design.widget.AppBarLayout> <android.support.design.widget.CollapsingToolbarLayout> <ImageView android:id="@+id/image" android:transitionName="image" … /> <android.support.v7.widget.Toolbar … /> </android.support.design.widget.CollapsingToolbarLayout> <android.support.design.widget.TabLayout … /> </android.support.design.widget.AppBarLayout> <FrameLayout… /> </android.support.design.widget.CoordinatorLayout> 项目布局: <RelativeLayout > <ImageView android:id="@id/itemImage" android:transitionName="image" /> <LinearLayout> <TextView … /> <TextView … /> </LinearLayout> </RelativeLayout> 现在,如果新的片段是通过项目点击开始的,我想将项目图像的animation添加到CollapsingToolbarLayout的ImageView中。 我阅读了有关ShareElementanimation的文章 ,但这不起作用,因为这不是真正的ShareElementanimation。 目标ImageView不在新的片段中,我也不必开始新的活动(我只在新的Fragment中使目标ImageView可见)。 那么如何在这种情况下创build这样的animation呢?

animation不会在当前可见的ListView项目中启动

我被卡住了,我无法在任何地方find解决scheme。 🙁 我有我的ListView(GridView),由BaseAdapter提供的每个项目的Layout中的ImageView。 当图像被加载,我分配加载的BitmapDrawable到ImageView使用 imageView.setImageDrawable( newImage ); 该项目popup没有任何问题。 但如果我通过使用TransitionDrawable或分配一个简单的animation分配新的BitmapDrawable: //this is inoperative – animation will not start for currently displayed items! No solution found 🙁 Animation a = LibResource.getResourceAnimation( activity, R.anim.fade_in ); imageView.setImageDrawable( newImage ); imageView.startAnimation( a ); animation不会为我的GridView的当前显示的项目启动。 如果我向下滚动GridView并将其滚动回所提到的项目,将显示图像并执行animation! 我已经尝试了以下修复: imageView.invalidateDrawable( newImage ); imageView.invalidate(); 在分配animation之后,我也尝试了以下语句 – 当然,我在UI-Thread上调用了它们,之后在UI-THREAD上分配和启动animation: myGridView.invalidate(); myGridView.invalidateViews(); myGridView.getAdapter().notifyDataSetChanged(); 如上所述,这个问题只发生在我的ListView中的可见项目。 为什么animation或者TransitionDrawable不能启动,即使在所有涉及的视图上调用了invalidate()之后呢? 问题发生在我的XPeria-Arc-S(API-Level 10)和Android-Emulators […]

活动开始时的animation跳转

我正在为我的Android应用程序animation自定义视图。 我已经通过属性animation完成了这一点,并根据https://developer.android.com/guide/topics/graphics/prop-animation.html在onAnimationUpdate()callback视图上调用invalidate() : 根据您正在animation的属性或对象,您可能需要在视图上调用invalidate()方法来强制屏幕使用更新后的animation值重绘本身。 您可以在onAnimationUpdate()callback中执行此操作。 我的问题是,当这些animation在新启动的 Activity开始时运行时,它们会在开始时跳过帧,导致它们非常明显地跳跃。 我已经尝试了两个: 立即从Activity的onCreate()方法开始animation 在OnGlobalLayout()callback中使用Activity根视图的OnGlobalLayout()启动animation。 我做了后者,因为我认为也许animation是在布局完成之前调用的,但结果是一样的。 使用日志,我确定onAnimationUpdate()callback在整个animation中(即从开始到结束每10-20毫秒左右onAnimationUpdate()一致地调用。 onAnimationUpdate()简单地调用invalidate() ,这应该强制视图重新绘制自己,理想情况下立即(但文档只声称这发生在“未来的某个时刻”)。 这似乎正是问题所在: onDraw()只在一开始被调用一次或两次,而不被调用大约250毫秒。 之后,每10-20毫秒重新开始一次,因为它应该有整个时间。 但是这段时间会导致animation非常明显的滞后。 要明确,这个问题只发生在活动的开始。 如果我在开始animation之前简单地设置一个300毫秒的延迟,它会一直运行。 但是我不喜欢这个解决scheme,因为它很好。 看来问题在于, onDraw()不会立即在Activity的开始附近的invalidate()处被调用。 但是,我不明白为什么这是什么阻止onDraw() ,或如何解决它。 我发现只有这个StackOverFlow线程: 活动开始时的animation跳过海报有相同问题的帧 。 基本代码在那里,video使问题变得清晰。 我也可以发布我的代码,但是我认为问题出现在最基本的testing应用程序中的事实表明还有其他事情正在发生。

为什么硬件加速不能在我的视图上工作?

我正在使用Facebook的回弹库来复制聊天头实现中看到的弹性animation。 问题是,大部分时间animation口吃。 一些图片将更好地解释这一点。 这里是平滑的聊天头animation: 这里是我的尝试(请注意白色View的animation几乎跳过所有的帧): 有一段时间它运作顺利: 下面是我目前使用的代码(如果你想快速设置,整个项目在Github上)。 我猜这与硬件加速没有在我的View上正确启用有关。 我的SpringSystem有两个Spring ,一个用于“泡泡”(Android图标),另一个用于内容(点击泡泡时显示的白色View )。 任何帮助如何解决这个问题将不胜感激。 谢谢。 AndroidManifest.xml : <application android:hardwareAccelerated="true" …> … </application> AppService.java : // the following code is in AppService#onCreate() // AppService extends android.app.Service // full code at https://github.com/vickychijwani/BubbleNote mContent.setLayerType(View.LAYER_TYPE_HARDWARE, null); final Spring bubbleSpring = system.createSpring(); bubbleSpring.setCurrentValue(1.0); bubbleSpring.addListener(new SpringListener() { @Override public void onSpringUpdate(Spring spring) { […]

setOffscreenPageLimit()如何通过保留更多的屏幕外片段来提高ViewPager的性能?

我有一个ViewPager控制五个Fragments 。 当我从索引1处的Fragment向索引0处的Fragment滑动时,我想消除animation中的短暂停顿 。 目前,我并没有调用setOffscreenPageLimit() ,所以我知道在Fragment 1处于空闲状态时, Fragment 0被ViewPager保留在内存中,因为屏幕外页面限制默认为1(任一当前Fragment一面)。 这是令人困惑的地方。 如果我在我的ViewPager上调用setOffscreenPageLimit(4) , 从1到0animation的滑动暂停就消失了 – animation是平滑的 。 因此,我总结道,在内存中保留Fragments 2-4将animation从Fragment 1改进为Fragment 0。 如何保留Fragments 2-4改善从Fragment 1到Fragment 0的滑动animation? 编辑 我运行TraceView,使用onPageScrollStateChanged(int state)来确定何时开始和停止跟踪,如下所示: @Override public void onPageScrollStateChanged(int state) { if (state == 1 && mViewPager.getCurrentItem() == 1) { Debug.startMethodTracing("ViewPagerTesting", 100000000); } if (state == 0 && mViewPager.getCurrentItem() == 0) { Debug.stopMethodTracing(); […]