目前我有一个ImageView
,可以延长设备的长度,缩放为3.显然,两边都在屏幕外被裁剪。我希望动画从设备左侧的图像左侧开始,然后将其移动直到图像的右侧位于设备的右侧。
我可以通过将图像设置为它的初始基础来实现它们,然后基本上这样做:
<objectAnimator
android:propertyName="translationX"
android:duration="6000"
android:valueTo="-1280"
android:valueType="floatType"
/>
但是,这只能起作用,因为我知道图像的确切尺寸以及我的摩托罗拉Xoom的确切尺寸。当然,我希望这可以在任何设备上工作,所以我需要一些不太硬编码的东西。使用Tween动画,它可以正常工作,因为您可以根据其大小的百分比来翻译某些内容。它并不完美,但它对这种效果起到了很好的作用。财产动画似乎没有这个。 translationX
和X
属性必须包含单位。
是否有一种基于相对位置转换具有属性动画的视图的简单方法?我是否必须为每个维度制作单独的动画文件?有没有其他方法可以实现这种效果?我不想制作自己的动画。
答案 0 :(得分:0)
您是否可以为已支持dp宽度的单独设备尺寸“存储桶”创建代码(例如平板电脑,手机环境等)。然后你可以使用下面这个来缩放图像(其中384对于某个设备桶宽度为384dp)并为你需要的valueTo int做类似的事情。
//Get the device screen pixel density so that you can scale
//the image in density independent pixels rather than pixels
final float scale = getActivity().getResources().
getDisplayMetrics().density;
//set the number of dp for the height and width by changing
//the number you multiply the (scale + 0.5f) by e.g. 384
int pixelsh = (int) (384 * scale + 0.5f);
int pixelsw = (int) (384 * scale + 0.5f);
这是将绝对像素转换为dp像素的方法。我不知道如何将这些用于你正在做的事情,但至少它是一个开始。
答案 1 :(得分:0)
您应该通过传递当前设备屏幕的屏幕大小在运行时创建动画。首先获取屏幕尺寸(注意:指标(宽度,高度)根据设备的旋转而变化):
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
int screenSize = metrics.widthPixels;
然后创建你的ObjectAnimator:
ObjectAnimator oa = ObjectAnimator.ofFloat(*yourImageView*, "translationX", 0, (Float) screenSize);
oa.setDuration(6000);
oa.start();