如何以编程方式为自定义视图(ImageView)设置动画?

Mar*_*arl 3 animation android view animated-gif

我想以编程方式为自定义视图设置动画.我希望它只在xml文件中声明它的位置动画,我不希望它弄乱布局.此动画也受其他因素的影响,因此android Animation类是不可能的.

我测试了这个示例教程并观看了这些视频.我的问题是,大多数教程都是为了将​​精灵设置为画布动画,您将在其中跟踪精灵的位置.

如何在不影响布局且不使用Android Animation类的情况下为自定义视图设置动画?

已编辑:自定义视图将充当动画gif,并在事件激活时切换另一组帧.

小智 5

您可以创建动画XML并将该动画从程序应用到ImageView检查以下示例

您可以为您的自定义视图启动动画 viewobject.startAnimation(animationobject);

animation.xml

<set xmlns:android="http://schemas.android.com/apk/res/android"
 android:shareInterpolator="false">
<scale
    android:interpolator="@android:anim/accelerate_decelerate_interpolator"
    android:fromXScale="1.0" 
    android:toXScale="1.4" 
    android:fromYScale="1.0" 
    android:toYScale="0.6" 
    android:pivotX="50%"
    android:pivotY="50%"
    android:fillAfter="false"
    android:duration="700" />
<set
    android:interpolator="@android:anim/accelerate_interpolator"
    android:startOffset="700">
    <scale
        android:fromXScale="1.4" 
        android:toXScale="0.0"
        android:fromYScale="0.6"
        android:toYScale="0.0" 
        android:pivotX="50%" 
        android:pivotY="50%" 
        android:duration="400" />
    <rotate
        android:fromDegrees="0" 
        android:toDegrees="-45"
        android:toYScale="0.0" 
        android:pivotX="50%" 
        android:pivotY="50%"
        android:duration="400" />
</set>
Run Code Online (Sandbox Code Playgroud)

你的main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView  
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:text="@string/hello"
/>
<ImageView android:id="@+id/ImageView01" android:layout_width="wrap_content" android:layout_height="wrap_content"></ImageView>

</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

然后你的活动类myActivity.java

public class myActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    ImageView image = (ImageView) findViewById(R.id.ImageView01);

    //create animation class object
    Animation hyperspaceJump = 
        AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump);
    //start animation for image
    image.startAnimation(hyperspaceJump);
}
}
Run Code Online (Sandbox Code Playgroud)