Android Studio 2.0 beta 6
我试图使用viewpropertyanimator在工具栏中移动一个
ImageView (ivSettings)
,使其从右侧20dp,从顶部20dp,从当前位置开始。并将ImageView (ivSearch)
20dp从左侧和顶部移动。图像视图包含在
Toolbar
中。这是初始状态,我想将图标移动到工具栏的上角。
我使用的代码是这样得到宽度,然后减去一个值,得到右边的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();
但是,在不同的屏幕尺寸上尝试过这个,我无法得到准确的宽度计算。有更好的办法吗?
非常感谢你的建议
最佳答案
您应该能够使用translationX
和translationY
属性来实现您想要的效果。这些属性用作视图的原始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());
这种方法的好处是,您不再需要知道父对象的维度。您只关心通过
translationX
和translationY
指定的偏移量。