Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/204.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android xml属性动画中的相对翻译_Android_Android Layout_Android Animation - Fatal编程技术网

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();