android.view.ViewTreeObserver#addOnDrawListener ( )源码实例Demo

下面列出了android.view.ViewTreeObserver#addOnDrawListener ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_view);

    view = (CustomView) findViewById(R.id.view);

    ViewTreeObserver viewTreeObserver = view.getViewTreeObserver();
    viewTreeObserver.addOnDrawListener(new ViewTreeObserver.OnDrawListener() {
        @Override
        public void onDraw() {

        }
    });

    viewTreeObserver.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {

        }
    });
}
 
源代码2 项目: LaunchEnr   文件: Launcher.java
public void onWindowVisibilityChanged(int visibility) {
    // The following code used to be in onResume, but it turns out onResume is called when
    // you're in All Apps and click home to go to the workspace. onWindowVisibilityChanged
    // is a more appropriate event to handle
    if (visibility == View.VISIBLE) {
        if (!mWorkspaceLoading) {
            final ViewTreeObserver observer = mWorkspace.getViewTreeObserver();
            // We want to let Launcher draw itself at least once before we force it to build
            // layers on all the workspace pages, so that transitioning to Launcher from other
            // apps is nice and speedy.
            observer.addOnDrawListener(new ViewTreeObserver.OnDrawListener() {
                private boolean mStarted = false;
                public void onDraw() {
                    if (mStarted) return;
                    mStarted = true;
                    // We delay the layer building a bit in order to give
                    // other message processing a time to run.  In particular
                    // this avoids a delay in hiding the IME if it was
                    // currently shown, because doing that may involve
                    // some communication back with the app.
                    mWorkspace.postDelayed(mBuildLayersRunnable, 500);
                    final ViewTreeObserver.OnDrawListener listener = this;
                    mWorkspace.post(new Runnable() {
                        public void run() {
                            if (mWorkspace != null &&
                                    mWorkspace.getViewTreeObserver() != null) {
                                mWorkspace.getViewTreeObserver().
                                        removeOnDrawListener(listener);
                            }
                        }
                    });
                    return;
                }
            });
        }
        clearTypedText();
    }
}
 
源代码3 项目: science-journal   文件: RunReviewOverlay.java
public void refreshAfterChartLoad(final boolean backUpdateProgressBar, final int numAttempts) {
  if (!chartController.hasDrawnChart()) {
    // Refresh the Run Review Overlay after the line graph presenter's chart
    // has finished drawing itself.
    final ViewTreeObserver observer = chartController.getChartViewTreeObserver();
    if (observer == null) {
      return;
    }
    observer.removeOnDrawListener(onDrawListener);
    onDrawListener =
        new ViewTreeObserver.OnDrawListener() {
          @Override
          public void onDraw() {
            RunReviewOverlay.this.post(
                new Runnable() {
                  @Override
                  public void run() {
                    if (!observer.isAlive()) {
                      if (numAttempts < MAX_REFRESH_ATTEMPTS) {
                        // Just try again, maybe it will come alive.
                        refreshAfterChartLoad(backUpdateProgressBar, numAttempts + 1);
                      }
                      return;
                    }
                    // The ViewTreeObserver calls its listeners without an iterator,
                    // so we need to remove the listener outside the flow or we risk
                    // an index-out-of-bounds crash in the case of multiple listeners.
                    observer.removeOnDrawListener(onDrawListener);
                    onDrawListener = null;
                    refresh(backUpdateProgressBar);
                  }
                });
          }
        };
    observer.addOnDrawListener(onDrawListener);
  } else {
    refresh(backUpdateProgressBar);
  }
}
 
源代码4 项目: ParallaxEverywhere   文件: PEWTextView.java
@Override
protected void onAttachedToWindow() {
    super.onAttachedToWindow();

    mOnScrollChangedListener = new ViewTreeObserver.OnScrollChangedListener() {
        @Override
        public void onScrollChanged() {
            applyParallax();
        }
    };

    mOnGlobalLayoutListener = new ViewTreeObserver.OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {
            heightView = (float) getHeight();
            widthView = (float) getWidth();

            applyParallax();
        }
    };

    ViewTreeObserver viewTreeObserver = getViewTreeObserver();
    viewTreeObserver.addOnScrollChangedListener(mOnScrollChangedListener);
    viewTreeObserver.addOnGlobalLayoutListener(mOnGlobalLayoutListener);

    if (updateOnDraw
            && android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
        onDrawListener = new ViewTreeObserver.OnDrawListener() {
            @Override
            public void onDraw() {
                applyParallax();
            }
        };
        viewTreeObserver.addOnDrawListener(onDrawListener);
    }

    parallaxAnimation();
}
 
源代码5 项目: ParallaxEverywhere   文件: PEWImageView.java
@Override
protected void onAttachedToWindow() {
    super.onAttachedToWindow();

    mOnScrollChangedListener = new ViewTreeObserver.OnScrollChangedListener() {
        @Override
        public void onScrollChanged() {
            applyParallax();
        }
    };

    mOnGlobalLayoutListener = new ViewTreeObserver.OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {
            heightImageView = (float) getHeight();
            widthImageView = (float) getWidth();

            applyParallax();
        }
    };

    ViewTreeObserver viewTreeObserver = getViewTreeObserver();
    viewTreeObserver.addOnScrollChangedListener(mOnScrollChangedListener);
    viewTreeObserver.addOnGlobalLayoutListener(mOnGlobalLayoutListener);

    if (updateOnDraw
            && android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
        onDrawListener = new ViewTreeObserver.OnDrawListener() {
            @Override
            public void onDraw() {
                applyParallax();
            }
        };
        viewTreeObserver.addOnDrawListener(onDrawListener);
    }

    parallaxAnimation();
}
 
源代码6 项目: TurboLauncher   文件: Launcher.java
public void onWindowVisibilityChanged(int visibility) {
	mVisible = visibility == View.VISIBLE;
	updateRunning();
	// The following code used to be in onResume, but it turns out onResume
	// is called when
	// you're in All Apps and click home to go to the workspace.
	// onWindowVisibilityChanged
	// is a more appropriate event to handle
	if (mVisible) {
		mAppsCustomizeLayout.onWindowVisible();
		if (!mWorkspaceLoading) {
			final ViewTreeObserver observer = mWorkspace
					.getViewTreeObserver();
			// We want to let Launcher draw itself at least once before we
			// force it to build
			// layers on all the workspace pages, so that transitioning to
			// Launcher from other
			// apps is nice and speedy.
			observer.addOnDrawListener(new ViewTreeObserver.OnDrawListener() {
				private boolean mStarted = false;

				public void onDraw() {
					if (mStarted)
						return;
					mStarted = true;
					// We delay the layer building a bit in order to give
					// other message processing a time to run. In particular
					// this avoids a delay in hiding the IME if it was
					// currently shown, because doing that may involve
					// some communication back with the app.
					mWorkspace.postDelayed(mBuildLayersRunnable, 500);
					final ViewTreeObserver.OnDrawListener listener = this;
					mWorkspace.post(new Runnable() {
						public void run() {
							if (mWorkspace != null
									&& mWorkspace.getViewTreeObserver() != null) {
								mWorkspace.getViewTreeObserver()
										.removeOnDrawListener(listener);
							}
						}
					});
					return;
				}
			});
		}
		clearTypedText();
	}
}