我有一个自定义视图,可以将可滚动的位图绘制到屏幕上.为了初始化它,我需要传递父布局对象的像素大小.但是在onCreate和onResume函数期间,尚未绘制布局,因此layout.getMeasuredHeight()返回0.
作为一种解决方法,我添加了一个处理程序等待一秒然后测量.这是有效的,但它很草率,我不知道在布局绘制之前我能在多长时间内缩短时间.
我想知道的是,如何检测布局何时被绘制?有事件或回调吗?
我有一个自定义视图,该视图将在
代码看起来像
public class DividendBarChartFragment extends SherlockFragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.dividend_bar_chart_fragment, container, false);
// barChartCompositeViewByYear is custom view.
this.barChartCompositeViewByYear = (BarChartCompositeView)v.findViewById(R.id.bar_chart_composite_view_by_year);
final ViewTreeObserver viewTreeObserver0 = this.barChartCompositeViewByYear.getViewTreeObserver();
// Only perform animation when view is ready?!
viewTreeObserver0.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@SuppressLint("NewApi")
@Override
public void onGlobalLayout() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
DividendBarChartFragment.this.barChartCompositeViewByYear.getViewTreeObserver().removeOnGlobalLayoutListener(this);
} else {
DividendBarChartFragment.this.barChartCompositeViewByYear.getViewTreeObserver().removeGlobalOnLayoutListener(this);
}
DividendBarChartFragment.this.barChartCompositeViewByYear.animateCurrentBarHeight();
}
});
Run Code Online (Sandbox Code Playgroud)
我希望animateCurrentBarHeight仅在Fragment准备好后才开始动画()。
我用addOnGlobalLayoutListener。但是,正如您在我的视频中看到的那样,似乎动画甚至发生在 …