在不创建自定义视图的情况下查找视图的中心

时间:2015-08-10 05:37:09

标签: android android-view

这是一项非常简单的任务,但我所看到的所有解决方案似乎都指向我创建一个扩展imageview的自定义视图。坦率地说这是荒谬的。这就是我想要做的事情:

我的动画:

public void spin() {

    float centerX = imageview.getX() + (imageview.getWidth()/2);
    float centerY = imageview.getY() + (imageview.getHeight()/2);

    Animation animation = new RotateAnimation(0, 360, centerX, centerY);
    animation.setRepeatCount(Animation.INFINITE);

    imageview.setAnimation(animation);
    imageview.animate();

}

我的观点:

<ImageView
    android:id="@+id/imageview"
    android:src="@mipmap/app_icon"
    android:layout_centerHorizontal="true"
    android:layout_above="@+id/progressbar"
    android:layout_marginBottom="60dp"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

getX(),getY(),getWidth()和getHeight()都在片段生命周期的每个阶段都返回0(onCreateView,onStart,onResume和onActivityCreated)。

是否可以在不创建自定义视图的情况下获取视图的中心?

1 个答案:

答案 0 :(得分:1)

尝试在View's生命周期方法中获取Fragment维度并不是正确的方法。最简单的方法是使用ViewTreeObserver,如下所示:

mYourImageView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {

    @Override
    public void onGlobalLayout() {
       int width = mYourImageView.getWidth();
       int height = mYourImageView.getHeight();
        if (width > 0 && height > 0) {
            if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN) {
              mYourImageView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
            } else {
              mYourImageView.getViewTreeObserver().removeGlobalOnLayoutListener(this);
            }

            //now you've got your dimensions.

        }
    }
});