这是一项非常简单的任务,但我所看到的所有解决方案似乎都指向我创建一个扩展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)。
答案 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.
}
}
});