android - xml中属性动画中的相对翻译

标签 android android-layout android-animation

目前我有一个 ImageView 扩展了设备的长度并按 3 缩放。显然,屏幕外的边被裁剪掉了。我希望动画从设备左侧的图像左侧开始,然后将其移动直到图像右侧位于设备右侧。

我可以通过将图像设置为初始基础然后基本上这样做来实现它们:

  <objectAnimator
    android:propertyName="translationX"
    android:duration="6000"
    android:valueTo="-1280"
    android:valueType="floatType"
  />

但是,这只适用于我知道图像的确切尺寸和我的摩托罗拉 Xoom 的确切尺寸。自然地,我希望它能在任何设备上运行,所以我需要一些不那么硬编码的东西。使用 Tween 动画,它可以正常工作,因为您可以根据其大小的百分比来转换某些内容。它并不完美,但对于这种效果来说已经足够好了。属性(property)动画似乎没有这个。 translationXX 属性必须有单位。

有没有一种简单的方法可以根据相对位置转换带有属性动画的 View ?我是否必须为每个维度制作一个单独的动画文件?有没有其他方法可以达到这种效果?我不想制作自己的动画。

最佳答案

您能否为您想要支持的具有已知 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像素的方法。我不知道如何将这些用于您正在做的事情,但至少这是一个开始。

关于android - xml中属性动画中的相对翻译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8510425/

相关文章:

android-jetpack-compose - 如何在不自动滚动更改的情况下使用 LazyColumn animateItemPlacement()?

java - 从另一个对象调用方法-java

android - 如何移动自定义对话框?

android - 避免在 android 中重复 fill_parent & wrap_content & match_parent

java - 是否可以使用 android :DrawableRight? 在 Buttons 和 TextViews 中使用 VectorDrawable

java - Android TranslateAnimation 到中心

android - 将两个动画应用于同一 View ?

android - 如何在应用程序中随机显示对话框

android - 使用 ArrayAdapter 在 ListView 中编辑文本

android - 具有多个布局的 ListView 在滚动时崩溃