1

我正在尝试ImageButton从 100% 缩放到 0%。该部分正在工作,但它似乎也将视图移向屏幕的左上角(朝向 0、0)。我不希望我只是想扩展它。为什么这也翻译了观点?

ScaleAnimation 实现

  if (view.getVisibility() == 0) {
        final ScaleAnimation scaleAnimation = new ScaleAnimation(1.0f, 0.0f, 1.0f, 0.0f, Animation.ABSOLUTE, centerX, Animation.ABSOLUTE, centerY);
        scaleAnimation.setInterpolator(interpolator);

    scaleAnimation.setDuration(5000);
            view.startAnimation((Animation)scaleAnimation);

        scaleAnimation.setAnimationListener(new Animation.AnimationListener(){

                public void onAnimationEnd(Animation animation) {
                    view.setVisibility(n);
                }

                public void onAnimationRepeat(Animation animation) {
                }

                public void onAnimationStart(Animation animation) {
                }
            });
    }
}

XML 中的ImageButton及其父级:android.support.design.widget.CoordinatorLayout

<android.support.design.widget.CoordinatorLayout android:id="@+id/main_content"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">

<ImageButton
    android:id="@+id/buttonToggleResultsWindow0"
    android:layout_width="35dp"
    android:layout_gravity="top|end"
    android:layout_height="35dp"
    android:visibility="gone"
    android:hint="Hide results window"
    android:backgroundTint="@color/accent"
    android:src="@drawable/ic_filter_tilt_shift_white_24dp"
    android:onClick="toggleResultsWindow"
    android:background="@drawable/ripple_circle"
/>

编辑 1

如果我将ScaleAnimation构造函数更改为此

final ScaleAnimation scaleAnimation = new ScaleAnimation(1.0f, 0.0f, 1.0f, 0.0f, Animation.RELATIVE_TO_SELF, centerX, Animation.RELATIVE_TO_SELF, centerY);

并设置centerX为 8 和centerY4 似乎保持在同一位置或非常接近同一位置。这对我来说没有任何意义。是什么导致了这种行为?

编辑 2

我弄清楚是什么导致了视图的翻译,但我仍然不确定如何解决它。似乎如果我使用setx()setY()在动画之前的任何时间移动视图,那么它就会变得一团糟。这是因为动画仍然使用视图的原始位置,而不是新位置。因此,当它平移视图时,它正被平移到原始位置。如何ScaleAnimation使用正确的坐标?

4

2 回答 2

0

尝试使用 pivotXType 和 pivotYType 是Animation.RELATIVE_TO_SELF

在我的 activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<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"
    android:background="#ff0000"
    tools:context="com.sonnv1368.animationscale.MainActivity">

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@mipmap/ic_launcher" />
</RelativeLayout>

在我的 MainActivity.class

public class MainActivity extends AppCompatActivity {
    private ImageView imageView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        imageView = (ImageView) findViewById(R.id.imageView);
        animationImageView();
    }

    private void animationImageView() {
        if (imageView.getVisibility() == View.VISIBLE) {
            final ScaleAnimation scaleAnimation = new ScaleAnimation(
                    1.0f, 0.0f, 1.0f, 0.0f,
                    Animation.RELATIVE_TO_SELF, 0.5f,
                    Animation.RELATIVE_TO_SELF, 0.5f);
            scaleAnimation.setDuration(5000);
            imageView.startAnimation(scaleAnimation);
        }
    }
}

它正在工作,它将在图像视图的中心缩放。

于 2016-07-30T02:47:58.650 回答
0

尝试使用 pivotXType 和 pivotYType 是Animation.RELATIVE_TO_SELF

于 2016-07-30T01:50:22.047 回答