在我的应用程序中,我正在动态创建一个ImageView,并设置一些常量的X,Y位置,然后我正在对它进行缩放动画。但我不确定,为什么它会运行(ImageView改变它的位置)。
<?xml version="1.0" encoding="utf-8"?>
<set android:shareInterpolator="false"
xmlns:android="http://schemas.android.com/apk/res/android">
<scale
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:fromXScale="1.0"
android:toXScale="2.5"
android:fromYScale="1.0"
android:toYScale="2.5"
android:pivotX="50%"
android:pivotY="50%"
android:fillAfter="false"
android:duration="1000" />
<alpha
android:fromAlpha="1"
android:toAlpha="0"
android:duration="1000"
/>
</set>
但是我希望它能够站在同一个位置,并且需要进行扩展以从较小的尺寸扩展到更大的尺寸。请帮帮我,我不确定我错在哪里。
final ImageView rippleImageView = new ImageView(context);
rippleImageView.setX(X);
rippleImageView.setY(Y);
rippleImageView.setImageBitmap(image);
((ViewGroup)(findViewById(R.id.rippleEffectView)).addView(rippleImageView, 0);
Animation a = AnimationUtils.loadAnimation(context, R.anim.scale_up);
a.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
((ViewGroup) rippleImageView.getParent()).removeView(rippleImageView);
}
@Override
public void onAnimationRepeat(Animation animation) {
}
});
rippleImageView.startAnimation(a);
布局文件很简单,
<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">
<Button
android:id="@+id/button"
android:layout_width="80dp"
android:layout_height="80dp"
android:layout_centerInParent="true" />
<RelativeLayout
android:id="@+id/rippleEffectView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerHorizontal="true"
android:layout_margin="5dp">
</RelativeLayout>
</RelativeLayout>
我希望两个圈子都需要处于相同的位置..
答案 0 :(得分:3)
最后,我通过以下两个步骤取得了成功。
我已将布局文件中的RelativeLayout更改为AbsoluteLayout。
<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">
<Button
android:id="@+id/button"
android:layout_width="80dp"
android:layout_height="80dp"
android:layout_centerInParent="true" />
<AbsoluteLayout
android:id="@+id/rippleEffectView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerHorizontal="true"
android:layout_margin="5dp">
</AbsoluteLayout>
</RelativeLayout>
不确定原因,setX(),setY()无效,但更改布局参数有效。
final ImageView rippleImageView = new ImageView(context);
LayoutParams params = new AbsoluteLayout.LayoutParams(200, 200, X, Y);
rippleImageView.setParams(params);
rippleImageView.setImageBitmap(image);
((ViewGroup)(findViewById(R.id.rippleEffectView)).addView(rippleImageView, 0);
Animation a = AnimationUtils.loadAnimation(context, R.anim.scale_up);
a.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
((ViewGroup) rippleImageView.getParent()).removeView(rippleImageView);
}
@Override
public void onAnimationRepeat(Animation animation) {
}
});
rippleImageView.startAnimation(a);
现在我的输出是,
答案 1 :(得分:0)
如果我理解正确,你希望动画运行后图像视图保持在更新位置,对吗?如果是这样,您需要在集合中设置android:fillAfter="true"
。请参阅文档here
所以最后你的动画xml看起来像
<?xml version="1.0" encoding="utf-8"?>
<set android:shareInterpolator="false"
xmlns:android="http://schemas.android.com/apk/res/android"
android:fillAfter="true">
<scale
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:fromXScale="1.0"
android:toXScale="2.5"
android:fromYScale="1.0"
android:toYScale="2.5"
android:pivotX="50%"
android:pivotY="50%"
android:duration="1000" />
<alpha
android:fromAlpha="1"
android:toAlpha="0"
android:duration="1000"
/>
</set>