Pav*_*nov 83 animation android
我正在尝试制作可以重复几次(或无限次)的简单动画.
好像android:repeatCount不行!
这是我的动画资源/res/anim/first_animation.xml:
<?xml version="1.0" encoding="utf-8"?>
<set
xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false"
android:repeatCount="infinite"
>
<scale
android:interpolator="@android:anim/decelerate_interpolator"
android:duration="500"
android:fromXScale="1.0"
android:fromYScale="1.0"
android:toXScale="1.2"
android:toYScale="1.2"
android:pivotX="50%"
android:pivotY="50%"
android:fillAfter="false" />
<scale
android:interpolator="@android:anim/accelerate_interpolator"
android:startOffset="500"
android:duration="500"
android:fromXScale="1.2"
android:fromYScale="1.2"
android:toXScale="1.0"
android:toYScale="1.0"
android:pivotX="50%"
android:pivotY="50%"
android:fillAfter="false" />
</set>
Run Code Online (Sandbox Code Playgroud)
首先,它应该在500毫秒内将图像从1.0尺寸缩放到1.2尺寸.
然后在500毫秒内将其缩放回1.0.
这是我如何使用它:
Animation firstAnimation = AnimationUtils.loadAnimation(this, R.anim.first_animation);
imgView.startAnimation(firstAnimation);
Run Code Online (Sandbox Code Playgroud)
它进行一个循环然后结束.
它会向上扩展,然后向下缩小然后停止.
我该如何按预期工作?
Ton*_*han 63
更新:早在2011年9月,Android工程师就解决了这个问题.在XML中忽略的属性现在的工作,与例外repeatCount和fillEnabled目前仍在忽略(故意出于某种原因).这意味着AnimationSet遗憾的是重复一段时间仍然不容易.
有关详细信息,请参阅更新文档中的概述(解释忽略哪些属性,哪些属性工作以及哪些属性传递给子级).而对于什么更深的理解fillAfter,fillBefore和fillEnabled实际上做,看工程师的(切特·哈泽)的博客文章关于它在这里.
为了扩展帕维尔和其他人的答案:<set>标签是荒谬的错误.它无法正确处理repeatCount和许多其他属性.
我花了几个小时搞清楚它能够和不能处理什么,并在此处提交了错误报告/问题:问题17662
总之(这关注AnimationSets):
setRepeatCount()/ android:repeatCount
此属性(以及repeatMode)在代码或XML中不起作用.这使得重复整套动画变得困难.
setDuration()/ android:duration
在代码WORKS中的AnimationSet上设置它(覆盖子动画的所有持续时间),但不包括在XML中的标记中
setFillAfter()/ android:fillAfter
这适用于标记的代码和XML.奇怪的是,我已经让它也可以在不需要将fillEnabled设置为true的情况下工作.
setFillBefore()/ android:fillBefore
似乎在代码和XML中都没有效果/被忽略
setFillEnabled()/ android:fillEnabled
似乎在代码和XML中都没有效果/被忽略.即使没有包含fillEnabled或将fillEnabled设置为false,我仍然可以获得fillAfter工作.
setStartOffset()/ android:startOffset
这仅适用于代码而不适用于XML.
Pav*_*nov 45
我发现<set>标签在类AnimationSet中有错误的实现.
它无法正确处理repeatCount.
我们可以做的是直接在<scale>标签中设置repeatCount.
这个XML资源运行良好:
<?xml version="1.0" encoding="utf-8"?>
<scale
xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:duration="200"
android:fromXScale="1.0"
android:fromYScale="1.0"
android:toXScale="1.05"
android:toYScale="1.05"
android:pivotX="50%"
android:pivotY="50%"
android:repeatMode="reverse"
android:fillAfter="false"
android:repeatCount="24"
/>
Run Code Online (Sandbox Code Playgroud)
不幸的是,这仅限于一次动画.
我们不能用这种方式定义一系列动画......
Mac*_*rte 39
您应该包含该属性
android:repeatCount="infinite"
Run Code Online (Sandbox Code Playgroud)
但在你的"规模"动画中没有"设定"
Dan*_*ofr 31
为了获得重复的动画,我使用了动画监听器,并在结束时再次调用动画.这样就可以像带有括号的动画一样聚焦相机标线.
这是动画布局xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<scale
android:fromXScale="1.0"
android:toXScale=".7"
android:fromYScale="1.0"
android:pivotX="50%"
android:pivotY="50%"
android:toYScale=".7"
android:duration="1000"/>
<scale
android:duration="1000"
android:fromXScale=".7"
android:toXScale="1.0"
android:fromYScale=".7"
android:pivotX="50%"
android:pivotY="50%"
android:toYScale="1.0"
android:startOffset="1000"/>
</set>
Run Code Online (Sandbox Code Playgroud)
这是java代码
public void startAnimation() {
View brackets = findViewById(R.id.brackets);
brackets.setVisibility(View.VISIBLE);
Animation anim = AnimationUtils.loadAnimation(BuzzFinderActivity.this, R.anim.crosshair_focusing);
anim.setAnimationListener(new AnimationListener() {
@Override
public void onAnimationEnd(Animation arg0) {
Animation anim = AnimationUtils.loadAnimation(BuzzFinderActivity.this, R.anim.crosshair_focusing);
anim.setAnimationListener(this);
brackets.startAnimation(anim);
}
@Override
public void onAnimationRepeat(Animation arg0) {
// TODO Auto-generated method stub
}
@Override
public void onAnimationStart(Animation arg0) {
// TODO Auto-generated method stub
}
});
brackets.startAnimation(anim);
}
Run Code Online (Sandbox Code Playgroud)
小智 10
我也遇到了同样的问题..我在XMl文件中包含了android:repeatCount ="infinite"..现在它的工作正常......
<translate
android:fromXDelta="0"
android:toXDelta="80"
android:duration="1000"
android:repeatCount="infinite"
android:repeatMode="reverse"
android:pivotX="50%"
android:pivotY="50%"
android:fillAfter="true"/>
Run Code Online (Sandbox Code Playgroud)
你可以尝试这个代码.在您的代码中添加,
firstAnimation.setRepeatCount(5);
Run Code Online (Sandbox Code Playgroud)
这将重复动画一段时间
firstAnimation.setRepeatCount(Animation.INFINITE);
firstAnimation.setRepeatMode(Animation.INFINITE);
Run Code Online (Sandbox Code Playgroud)
这将无限期地重复动画.
| 归档时间: |
|
| 查看次数: |
87158 次 |
| 最近记录: |