不同屏幕尺寸的相同平移Y.

时间:2016-09-30 23:39:02

标签: android android-animation

我在我的一个使用FrameLayout的Screen上使用ViewCompat.animate()动画,它在测试手机上看起来很好。 但当然,一旦在测试平板电脑(Nexus 7 2013)上运行,动画就不一样了。

所以我正在寻找一种方法来获得相同的显示翻译Y,在不同的屏幕尺寸上,而不使用不同的尺寸资源文件。 当然有一种方法可以在运行时计算它并自行排序。

我试过:float px = -182 *(getResources()。getDisplayMetrics()。densityDpi / 160f); 但是2个屏幕上视图的行进距离并不相同。

看到这篇文章,但没有提供解决方案:android animation in different screen sizes

有人有想法吗?

干杯

2 个答案:

答案 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());
    }
});