Android xml属性动画中的相对翻译
目前我有一个Android xml属性动画中的相对翻译,android,android-layout,android-animation,Android,Android Layout,Android Animation,目前我有一个ImageView,它扩展了设备的长度,并按3的比例缩放。显然,侧面是在屏幕外裁剪的。我希望动画从设备左侧的图像左侧开始,然后将其移动,直到图像右侧位于设备右侧 我可以通过将图像设置为其初始基础,然后基本上执行以下操作来实现这些目标: <objectAnimator android:propertyName="translationX" android:duration="6000" android:valueTo="-1280" andro
ImageView
,它扩展了设备的长度,并按3的比例缩放。显然,侧面是在屏幕外裁剪的。我希望动画从设备左侧的图像左侧开始,然后将其移动,直到图像右侧位于设备右侧
我可以通过将图像设置为其初始基础,然后基本上执行以下操作来实现这些目标:
<objectAnimator
android:propertyName="translationX"
android:duration="6000"
android:valueTo="-1280"
android:valueType="floatType"
/>
然而,这只是因为我知道图像的确切大小和我的摩托罗拉Xoom的确切大小。当然,我希望它能在任何设备上工作,所以我需要一些不太硬的编码。对于Tween动画,它可以正常工作,因为您可以根据其大小的百分比来翻译某些内容。它不是完美的,但对于这种效果来说它已经足够好了。物业管理似乎没有这个功能。translationX
和X
属性必须具有单位
是否有一种简单的方法可以基于相对位置平移带有属性动画的视图?我必须为每个维度制作一个单独的动画文件吗?有没有其他方法可以达到这个效果?我不想制作自己的动画。您能否为要支持的单独设备大小的“存储桶”创建代码(例如平板电脑、手机背景等),这些存储桶具有已知的dp宽度。然后,您可以使用下面的这个函数来缩放图像(对于特定的设备存储桶宽度,384是384dp),并对所需的value to 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像素的方法。我不知道如何将这些用于您正在做的事情,但至少这是一个开始。您应该在运行时通过传递当前设备屏幕的屏幕大小来创建动画。首先获取屏幕大小(注意:指标(宽度、高度)随设备旋转而变化): 然后创建ObjectAnimator:
ObjectAnimator oa = ObjectAnimator.ofFloat(*yourImageView*, "translationX", 0, (Float) screenSize);
oa.setDuration(6000);
oa.start();
你知道怎么做吗???这还不够详细,因为在编译时无法确定视图的像素大小。我最终放弃了这个想法,只是在运行时创建了ObjectAnimators,当时已知大小。
ObjectAnimator oa = ObjectAnimator.ofFloat(*yourImageView*, "translationX", 0, (Float) screenSize);
oa.setDuration(6000);
oa.start();