如何在动画结束时在屏幕上显示图像的某些部分

时间:2013-09-02 10:27:43

标签: android animation

我正在创建一个动画,其中图像从一个方向转换到另一个方向,动画将一半图像移出屏幕,但图像在动画结束时显示为完整。我只想在动画后显示一半的图像。

目前我在动画开始时在图像视图中使用完整图像,并在动画结束时将其替换为半图像,但它显示的图像更改反射看起来很尴尬,这是我的实际问题。

下面是我的xml和类文件。

动画代码

<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration = "2000"
    android:fillBefore="true"
    android:fillEnabled="true"
    android:fromXDelta = "-300%"
    android:fromYDelta="200%"
    android:toXDelta="60%">

</translate>

animimv5.setAnimationListener(new AnimationListener() {
            @Override
            public void onAnimationStart(Animation animation) {
                imv5.setBackgroundResource(R.drawable.img5);
            }
            @Override
            public void onAnimationRepeat(Animation animation) {

            }
            @Override
            public void onAnimationEnd(Animation animation) {
                imv5.setBackgroundResource(R.drawable.img5_2);
            }
        });

2 个答案:

答案 0 :(得分:1)

您可以尝试以下操作:

xml中的

(将其添加到set参数)android:fillAfter或使用类源setFillAfter(boolean)中的相关方法

  

设置为true时,将在之后应用动画转换   动画结束了。根据文件here   设置为true时,将在之后应用动画转换   动画结束了。默认值为false。如果fillEnabled不是   设置为true并且未在View上设置动画,fillAfter是   假设是真的。

有关其他提示和说明,请查看Chet's blog post

希望它有所帮助..;)

答案 1 :(得分:0)

先生,先生:

MainActivity :

    public class MainActivity extends Activity {

    private View animatedView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        animatedView = findViewById(R.id.view);
    }

    public void animate(View view) {
        int targetX = ((View) animatedView.getParent()).getWidth() - animatedView.getWidth() / 2;
        ObjectAnimator.ofFloat(animatedView, "x", 0, targetX).setDuration(1000).start();
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

}

布局XML:

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                xmlns:tools="http://schemas.android.com/tools"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                tools:context=".MainActivity">

    <TextView
            android:id="@+id/view"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="#CC0000"
            android:padding="30dp"
            android:textColor="@android:color/white"
            android:text="@string/hello_world"/>
    <Button
            style="?android:attr/buttonStyleSmall"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Animate"
            android:onClick="animate"
            android:id="@+id/button"
            android:layout_alignParentBottom="true"
            android:layout_centerHorizontal="true"/>

</RelativeLayout>