Android Studio 2.0 beta 6

我试图使用viewpropertyanimator在工具栏中移动一个ImageView (ivSettings),使其从右侧20dp,从顶部20dp,从当前位置开始。并将ImageView (ivSearch)20dp从左侧和顶部移动。
图像视图包含在Toolbar中。
这是初始状态,我想将图标移动到工具栏的上角。
android - 获取父布局的宽度-LMLPHP
我使用的代码是这样得到宽度,然后减去一个值,得到右边的ivsettings为20dp。
final DisplayMetrics displayMetrics = new DisplayMetrics();
getActivity().getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
final float widthPx = displayMetrics.widthPixels;

ivSearch.animate()
    .setInterpolator(new AccelerateInterpolator())
    .x(20)
    .y(20)
    .setDuration(250)
    .start();

ivSettings.animate()
    .setInterpolator(new AccelerateInterpolator())
    .x(widthPx - 160)
    .y(20)
    .setDuration(250)
    .start();

但是,在不同的屏幕尺寸上尝试过这个,我无法得到准确的宽度计算。有更好的办法吗?
非常感谢你的建议

最佳答案

您应该能够使用translationXtranslationY属性来实现您想要的效果。这些属性用作视图的原始X和Y坐标的偏移。
本质上,translationx将从a视图的x坐标向右移动正值,向左移动负值。类似地,平移Y将视图从Y坐标向底部移动正值,向顶部移动负值。
说到您的问题,我假设您要到达的最终位置是搜索图标的左上角,以及设置图标的右上角,每个视图都没有填充。
对于搜索图标,我建议您首先将其放置在工具栏的左上角。然后将translationx和translationy都设置为20p,这会将搜索图标放置在与图像相同的位置。要将搜索图标移动到左上角,只需设置从20dp到0dp的X&Y平移动画。
对设置图标重复相同的操作,但将translationx设置为-20dp,translationy设置为20dp。这样它就会和你的图像放在同一个位置。将两个值设置为0以实现所需的动画。
这是动画代码供参考。

ivSearch.animate()
    .setInterpolator(new AccelerateInterpolator())
    .translationX(0) // Takes value in pixels. From 20dp to 0dp
    .translationY(0) // Takes value in pixels. From 20dp to 0dp
    .setDuration(250)
    .start();

ivSettings.animate()
    .setInterpolator(new AccelerateInterpolator())
    .translationX(0) // Takes value in pixels. From -20dp to 0dp
    .translationY(0) // Takes value in pixels. From 20dp to 0dp
    .setDuration(250)
    .start();

// To get pixels from dp
float px = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, getResources().getDisplayMetrics());

这种方法的好处是,您不再需要知道父对象的维度。您只关心通过translationXtranslationY指定的偏移量。

08-18 05:49