我正在尝试使用翻译动画将图像视图从屏幕顶部移动到屏幕的中心或中间,即当活动开始时图像视图开始从屏幕顶部移动到图像视图空间顶部的屏幕中间或中心图像视图空间的底部在屏幕上显示与我们在相对布局中使用的标签中心相同的标签中心在父级布局的xml文件中为true。一般我们在facebook和whatsapp应用程序中找到这些类型的动画,他们已经用于图像翻译或移动图像视图动画。我已经尝试了大量的问题和答案也谷歌搜索但没有找到适当的解决方案。到目前为止我做了什么。请帮我解决这些问题。谢谢。
public class MainActivity extends AppCompatActivity {
ImageView imageview;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageview = (ImageView) findViewById(R.id.imagview);
RelativeLayout root = (RelativeLayout) findViewById(R.id.rel);
TranslateAnimation anim = new TranslateAnimation(0, 0, 0, 50);
anim.setInterpolator((new AccelerateDecelerateInterpolator()));
anim.setAnimationListener(new MyAnimationListener());
anim.setDuration(500);
anim.setFillAfter(true);
imageview.startAnimation(anim);
}
});
}
答案 0 :(得分:3)
假设您的View
位于屏幕左上角,我们希望将其设置为屏幕中心的动画。
布局文件:
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/root">
<View
android:id="@+id/animated_view"
android:layout_width="50dp"
android:background="#6eed57"
android:layout_height="50dp"/>
</FrameLayout>
在onCreate()
:
final View root = findViewById(R.id.root);
final View animatedView = findViewById(R.id.animated_view);
root.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(final View v) {
animatedView.animate()
.translationX((root.getWidth() - animatedView.getWidth()) / 2)
.translationY((root.getHeight() - animatedView.getHeight()) / 2)
.setInterpolator(new AccelerateInterpolator())
.setDuration(500);
}
});
结果:
答案 1 :(得分:1)
您无法在onCreate()
中启动动画,因为屏幕对于用户来说并不完全可见。如果您的根视图使用整个屏幕区域,您也不需要获取根视图。
boolean hasAnimationStarted;
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
if (hasFocus && !hasAnimationStarted) {
hasAnimationStarted=true;
DisplayMetrics metrics = getResources().getDisplayMetrics();
ObjectAnimator translationY = ObjectAnimator.ofFloat(imageview, "y", metrics.heightPixels / 2 - imageview.getHeight() / 2); // metrics.heightPixels or root.getHeight()
translationY.setDuration(500);
translationY.start();
}
}
答案 2 :(得分:-1)
Layout xyLayout = findViewById(R.id.xyLayout);
ImageView imageView = findViewById(R.id.xyImageView);
imageView.animate().xBy(xyLayout.getMeasuredWidth()/2).yBy(xyLayout.getMeasuredHeight()/2).start;