我尝试使用片段和objectAnimator来制作这里的翻转动画,并且在Android 4.1上一切正常,但是当我尝试添加时android-support-v13. jar,使用FragmentActivity并在旧版本上启动它,片段之间的动画会使应用程序崩溃并出现此错误:
java.lang.RuntimeException: Unknown animation name: objectAnimator
Run Code Online (Sandbox Code Playgroud)
请问,您能说我如何使用objectAnimator或如何使用常见的Android动画创建翻转动画?
UPD:我也尝试过使用http://nineoldandroids.com/,但我无法理解它如何用于活动过渡动画.
我的应用程序大量使用ObjectAnimator.但我最近注意到,当打开省电模式时,使用ObjectAnimator的动画不起作用,有时甚至会崩溃.由于应用UI的流畅性很大程度上依赖于动画,因此我不能省略它们中的任何一个.请提供解决方法,以便即使在省电模式下也可以使用这些动画.所有的动画师都会造成这个问题吗?提前致谢.
animation android objectanimator battery-saver android-5.0-lollipop
ObjectAnimator我想在 a 上使用 an Drawable(而不是 a View)。假设我有一个ImageViewand 以 aDrawable作为源:
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/imageView"
android:background="@color/myColor"
android:src="@drawable/myDrawable/>
Run Code Online (Sandbox Code Playgroud)
我想要的是只有myDrawable动画,而不是例如在ImageView.
现在,如果我ObjectAnimator在可绘制对象上应用 an ,则什么也不会发生:
ImageView imageView = (ImageView) findViewById(R.id.imageView);
Drawable myDrawable = imageView.getDrawable();
ObjectAnimator animator = ObjectAnimator.ofFloat(myDrawable, "alpha", 1f, 0f);
animator.setDuration(1000);
animator.start();
Run Code Online (Sandbox Code Playgroud)
为什么?
实现信息: 我已经在他自己的问题上发布了CommonsWare响应之后实现了3个窗格布局:Gmail三片段动画场景的完整工作示例?
总的来说,我的布局包括以下级别(1到3):
MainActivitySlidingMenu(侧面抽屉UI图案)片段隐藏在左侧,而一个ContentFragment片段包含3个窗格布局.ContentFragment:LeftListFragment,(每3个TextViews行)MiddleListFragment(每个8个TextViews行), DetailFragment.LeftListFragment并MiddleListFragment用于CursorLoaders从ContentProvider每个列表中加载数据.DetailFragment在需要时还要求带有数据的游标.所以我甚至没有实现自定义Adapters(这种方式更好的设计).然后我添加了3个窗格布局+动画.就工作而言,它按预期工作,没有问题.Animation时间是500毫秒.
问题: 动画口吃不多.一些丢帧.当左侧和中间都可见时,我单击中间列表项以打开详细信息; 当我点击"返回"按钮再次查看左侧和中间列表(当没有实际装载时).
我尝试过的:
DetailView.我只是点击一个项目,MiddleFragment动画开始,没有任何细节实际加载.仍然口吃.此外,当击中,没有任何负载,它仍然口吃,所以我认为加载器/光标不是这个的原因.Animation时间从500毫秒减少到200毫秒.如果你仔细观察它仍然是口吃,它只是更快.编辑:我切换rightPaneWidth到leftPaneWidth下面(是的,这删除了重新定尺寸的动画),口吃现在已经消失.列表仍然向左侧滑动,但宽度不会变小.因此,如果现在没有更多的口吃,这是否意味着我的代码中的ObjectAnimator存在问题?
ObjectAnimator.ofInt(this, "middleWidth", rightPaneWidth, leftPaneWidth)
.setDuration(ANIM_DURATION).start();
Run Code Online (Sandbox Code Playgroud)
谢谢你的时间 !
3窗格布局代码:
package com.xyz.view.widget;
import android.animation.ObjectAnimator;
import android.annotation.SuppressLint;
import android.annotation.TargetApi;
import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.view.ViewPropertyAnimator;
import android.widget.LinearLayout;
public class …Run Code Online (Sandbox Code Playgroud) 我有一个实例,其中显示和隐藏了几个按钮,具体取决于ViewPager中的哪个页面正在显示.使用Animators显示和隐藏.有没有办法检查/延迟单元测试,直到完成为止?
我正在使用Robolectric,因为这可能是相关的.我试着打电话,Robolectric.runUiThreadTasksIncludingDelayedTasks();但这似乎没有解决任何问题.
动画代码如下:
public static void regularFadeView(final boolean show, final View view) {
view.animate()
.setInterpolator(mDecelerateInterpolator)
.alpha(show ? 1 : 0)
.setListener(new SimpleAnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
if (show) view.setVisibility(View.VISIBLE);
}
@Override
public void onAnimationEnd(Animator animation) {
if (!show) view.setVisibility(View.INVISIBLE);
}
})
.start();
}
Run Code Online (Sandbox Code Playgroud) 我有以下AnimatorSet方法:
private AnimatorSet dialCenterThrob() {
int bpm = workoutStream.getHeartRate();
dialCenterImageView.clearAnimation();
AnimatorSet finalSet = new AnimatorSet();
ObjectAnimator pulseX = ObjectAnimator.ofFloat(dialCenterImageView, View.SCALE_X, 0.98f, 1.06f);
ObjectAnimator pulseY = ObjectAnimator.ofFloat(dialCenterImageView, View.SCALE_Y, 0.98f, 1.06f);
pulseX.setRepeatMode(ObjectAnimator.REVERSE);
pulseX.setRepeatCount(ObjectAnimator.INFINITE);
pulseY.setRepeatMode(ObjectAnimator.REVERSE);
pulseY.setRepeatCount(ObjectAnimator.INFINITE);
pulseX.setDuration(bpm);
pulseY.setDuration(bpm);
pulseX.setInterpolator(new AccelerateInterpolator());
pulseY.setInterpolator(new AccelerateInterpolator());
finalSet.playTogether(pulseX, pulseY);
return finalSet;
}
Run Code Online (Sandbox Code Playgroud)
这是在var上设置的,称为throbber,偶尔会通过以下方法更新:
private void updateThrobbing() {
if (hasThrob()) {
throbber = dialCenterThrob();
throbber.start();
} else {
if (throbber != null && throbber.isRunning()) {
stopThrobbing();
}
}
}
Run Code Online (Sandbox Code Playgroud)
但我不能让它停止动画,这是目前尝试这样做的方法:
public void stopThrobbing() {
List<Animator> throbbers = throbber.getChildAnimations();
for(Animator …Run Code Online (Sandbox Code Playgroud) 当常量和不可修改的速度至关重要时,如何使ObjectAnimator独立于"Animator持续时间刻度"开发人员选项设置?
当使用动画时,我可以做这样的事情
ScaleAnimation animation = new ScaleAnimation(0, 1.0, 0, 1.0, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
Run Code Online (Sandbox Code Playgroud)
从 0 缩放到对象的原始大小。
我怎样才能对ObjectAnimatoror做同样的事情ValueAnimator?
这是用于创建 alpha 动画对象的 Java 代码。
ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(myView, "alpha", 0.5f, 0f);
Run Code Online (Sandbox Code Playgroud)
这是用于执行相同操作的 Kotlin 代码。
val objectAnimator = ObjectAnimator.ofFloat(myView, "alpha", 0.5f, 0f)
Run Code Online (Sandbox Code Playgroud)
在我将上面的 Java 代码转换为 Kotlin 之后,当鼠标悬停在发生错误的行上时,Android Studio 会向我发出红色错误警告并显示此消息。 在 java.lang.Void 上找不到属性设置器方法 setAlpha 更多
尽管 IDE 给出了这个错误,但我仍然能够编译和运行它。知道为什么它会在 Kotlin 中给出这个错误以及如何摆脱这个错误警告吗?
setX如果将属性x指定为字符串,ObjectAnimator如何调用适当的方法?我的意思是,用什么技术来识别我想要为rotation我的视图的属性设置动画并调用该视图的适当方法setRotation?
我已经了解了ObjectAnimator如何工作并设法使用它,它非常简单,我只是对操作原理感到好奇.
android ×10
objectanimator ×10
animation ×2
java ×2
animator ×1
duration ×1
kotlin ×1
robolectric ×1
unit-testing ×1