Android: 有没有办法获取TranslateAnimation后View的最新位置?

标签 android location translate-animation

我知道多种获取 View 位置值的方法。

getLocationOnScreen()
getLocationInWindow()
getLeft()

但是,它们实际上都没有返回我通过 startAnimation() 方法移动的 View 的当前位置,而只是返回原始位置。

那么,现在让我们制作一个每次点击时向右移动 10 像素的 View (我省略了布局,因为您可以将任何 View 放在主 XML 中并将其赋予 onClickListener)。

public class AndroidTestActivity extends Activity implements OnClickListener {  
LinearLayout testView;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    testView = (LinearLayout) this.findViewById(R.id.test);
    testView.setOnClickListener(this);
}

public void onClick(View v) {
    int[] pLoS = new int[2];
    testView.getLocationOnScreen(pLoS);
    TranslateAnimation move = new TranslateAnimation(pLoS[0], pLoS[0] + 10, 0f, 0f);
    move.setFillAfter(true);
    move.setFillEnabled(true);
    testView.startAnimation(move);
}

}

如您所见,这并没有像我预期的那样工作,因为 getLocationOnScreen() 总是返回相同的值(在我的例子中为 0),并且没有反射(reflect)我在 TranslateAnimation 中使用的值...

有什么想法吗?

最佳答案

假设您使用的是 Android < 3.0,那么您的问题可能与我的问题类似 here .基本上动画与 View 本身是分开的,即 Android 为您的 View 副本设置动画。这就是 getLocationOnScreen() 总是返回 0 的原因。移动的不是 View (动画),而是移动的副本(动画)。如果您看到我的问题的答案,此问题已在更高版本的 Android 中得到解决。

关于Android: 有没有办法获取TranslateAnimation后View的最新位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11064388/

相关文章:

android: 如何创建 ACRA 崩溃报告 Txt 文件?

javascript - Android 互联网应用程序无法正确呈现移动网站版本

javascript - Angular 5 - 我应该使用哪个向后导航 - href 或 location.back()?

android - 窗口动画与 Android 5.0 上的导航栏重叠

java - Android 对 Web API 的多部分请求未获取与请求关联的文本

android - 在 Android 中生成两个日期之间的日期

java - 为什么我的位置在第一次尝试时返回 null?

c++ - 如何在 C++ 中的字符串数组中查找单词位置?

android - 使用RelativeLayout 和SurfaceView 进行TranslateAnimation

css - 背景颜色对 Angular 线拆分响应