我在我的一个使用FrameLayout的Screen上使用ViewCompat.animate()动画,它在测试手机上看起来很好。 但当然,一旦在测试平板电脑(Nexus 7 2013)上运行,动画就不一样了。
所以我正在寻找一种方法来获得相同的显示翻译Y,在不同的屏幕尺寸上,而不使用不同的尺寸资源文件。 当然有一种方法可以在运行时计算它并自行排序。
我试过:float px = -182 *(getResources()。getDisplayMetrics()。densityDpi / 160f); 但是2个屏幕上视图的行进距离并不相同。
看到这篇文章,但没有提供解决方案:android animation in different screen sizes
有人有想法吗?
干杯
答案 0 :(得分:1)
所以这就是我尝试的,获取设备的高度dpi并使用它将dp值(182)转换为像素。
DisplayMetrics displayMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getRealMetrics(displayMetrics);
float yDpi = displayMetrics.ydpi;
float px = 182 * (yDpi / 160);
虽然每个设备的px值结果不同,但翻译在不同的屏幕上仍然没有相同的距离
DisplayMetrics displayMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
float translationY = displayMetrics.heightPixels * 0.40f;
获得屏幕高度并用于计算行程距离等于设备屏幕高度的40%。
所以现在,无论使用什么设备,动画都是相同的,并且行进的距离相同。
此外,使用的浮点值可以非常精确。我使用0.40f
,但您可以执行0.398f
答案 1 :(得分:0)
为了避免任何不必要的数学运算,从屏幕上已经显示的视图中获取指标更加容易。唯一需要做的就是在活动时在post
中有一个onCreate
。如果是碎片,您可以直接在onViewCreated
中直接处理,而无需任何post
View settingsView = findViewById(R.id.settings_layout);
View youtubeView = findViewById(R.id.youtubeLink);
settingsView.post(new Runnable() {
@Override
public void run() {
//metrics already calculated
settingsView.animate().translationX(youtubeView.getWidth());
}
});